structs2 中关于struts2.xml文件中的action和result标签

来源:互联网 发布:剑灵正太捏脸数据 编辑:程序博客网 时间:2024/05/24 02:58

在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,这两个值是一样的,所以便可以访问到页面了。

阅读全文
0 0
原创粉丝点击