Action编写方式
第一种:创建普通类,这个不继承任何类,不实现任何接口
public class HelloAction {
...
}
第二种:创建类,实现接口 Action(不推荐使用,实现接口必须实现接口中所有方法)
import com.opensymphony.xwork2.Action;
public class UserAction implements Action {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
第三种:创建类,继承类 ActionSupport(一般使用)
import com.opensymphony.xwork2.ActionSupport;
public class PersonAction extends ActionSupport {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
Action访问方法
第一种:使用action标签的method属性,属性值写执行的action的方法
创建action,创建多个方法
public class PersonAction extends ActionSupport {
public String add() throws Exception {
return "add";
}
public String del() throws Exception {
return "del";
}
}
在struts.xml配置method
<package name="hellodemo" extends="struts-default" namespace="/">
<!-- 有method属性:写要执行的action里面的方法的名称 -->
<action name="add" class="action.PersonAction" method="add">
<result name="add">/add.jsp</result>
</action>
<action name="del" class="action.PersonAction" method="del">
<result name="del">/del.jsp</result>
</action>
</package>
缺陷:action每个方法都需要配置,如果action里面有多个方法,配置很多的action
第二种:使用action标签里面name属性,属性值使用通配符 * 星号
<package name="hellodemo2" extends="struts-default" namespace="/">
<!-- name属性值里面写符号*,*对应action里面的方法名
(1)访问 book_add,使用 book_* 可以匹配到action里面的add方法,*相当于变成add
(2)访问 book_del,使用 book_* 可以匹配到action里面的del方法,*相当于变成del
上面两个路径使用 book_* 可以匹配到
method属性匹配"*"值,有一个*默认从1开始数,格式:{1} -->
<action name="book_*" class="action.PersonAction" method="{1}">
<result name="add">/add.jsp</result>
<result name="del">/del.jsp</result>
</action>
</package>
注意
1、如果action方法有返回值,在配置文件中没有配置,出现错误
2、在action里面的方法有返回值,如果有返回值时候类型必须是String
3、action里面的方法可以没有返回值,没有返回值时候,在result标签不需要配置
- 把方法写成void
- 让返回值,返回 NONE
@Override
public String execute() throws Exception {
return NONE;
}