核心提示:在action标签中,有一个method的属性,通过该属性,调用类中的具体方法。但如果没有说明该属性,则默认会调用execute()方法。而在result标签中,name属性默认值为success。且...
在action标签中,有一个method的属性,通过该属性,调用类中的具体方法。但如果没有说明该属性,则默认会调用execute()方法。
而在result标签中,name属性默认值为success。且只有当返回值等于name属性值时,才可以访问到result标签中的jsp页面。
但是,如果在action标签中没有说明method属性,理论上默认调用的是execute()方法,而在result标签中也没有说明name属性,默认值应该是success。奇怪的是,无论类中是否有execute()方法,都会直接访问result标签中的jsp页面。甚至于该类如果是一个空的类,只要继承了ActionSupport,都可以访问。
以下为具体试验情况:
第一种:
UserAction类中的方法有且只有一个add();
public String add() { System.out.println("已经调用该方法!"); return "abcd"; }
action配置如下:
<action name="userAdd" class="action.UserAction"> <result name="success">/user_add_success.jsp</result> </action>
可以访问!!
第二种:
UserAction类中的没有方法
action配置如下:
<action name="userAdd" class="action.UserAction"> <result name="success">/user_add_success.jsp</result> </action>
可以访问!!
第三种:
UserAction类中的方法有且只有一个add();
public String add() { System.out.println("已经调用该方法!"); return "success"; }
action配置如下:
<action name="userAdd" class="action.UserAction" method="add"> <result name="success">/user_add_success.jsp</result> </action>
可以访问!!
第四种:
UserAction类中的方法有且只有一个add();
public String add() { System.out.println("已经调用该方法!"); return "abcd"; }
action配置如下:
<action name="userAdd" class="action.UserAction" method="add"> <result>/user_add_success.jsp</result> </action>
不可以访问!!但如果将“abcd”改成“success”,就可以访问,或者在result标签中写上name="abcd",也可以访问
综上:
出现该现象的原因是因为:
当没有设置method属性时,默认调用类中的execute()方法,但如果类中本身并没有该方法,则会向其父类,
即向ActionSupport中调用execute()方法,该方法返回值为success,所以,当result中未指明name属性值时,
默认为success,这两个值是一样的,所以便可以访问到页面了。