所有的开发之中,每一个Action都要同时处理多个操请求,所以来讲在Struts2.x里面依然处理多业务的操作.那么下面为了更好的观察出问题,重新建立新的Action以及vo类.
范例:定义一个新闻的VO类
package cn.zwb.vo;
public class News {
private Integer nid;
private String title;
private String content;
public Integer getNid() {
return nid;
}
public void setNid(Integer nid) {
this.nid = nid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "News [nid=" + nid + ", title=" + title + ", content=" + content + "]";
}
}
随后建立一个NewsAction,这个Action要求可以进行多业务的处理,如果写多业务处理的话就不要使用execute()方法
范例:定义NewsAction
package cn.zwb.action;
import com.opensymphony.xwork2.ActionSupport;
import cn.zwb.vo.News;
public class NewsAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private News news=new News();
public News getNews() {
return news;
}
public String insert(){ //增加操作但是不跳转
System.out.println("***********[增加新闻]"+this.news);
return null;
}
public void update(){
System.out.println("***********[修改新闻]"+this.news);
}
public void list(){
System.out.println("***********[新闻列表]"+this.news);
}
public void delete(){
System.out.println("***********[删除新闻]"+this.news);
}
}
随后进行struts.xml文件的配置操作.
范例:定义struts.xml文件
<action name="NewsActon_*" class="cn.zwb.action.NewsAction" method="{1}">
</action>
如果现在要只执行增加操作,则路径使用:NewsAction_insert.action,如果是修改操作使用NewsAction_update.action,依次类推.
可以发现在Struts2.x之中,每一次执行的时候是几上都会重新生成新的Action对象,所以来讲里面的内容不会从上一次的内容延用到本次请求的情况.
如果说此时你的项目开发是基于配置文件完成的,这样的配置完全可用,而且可以发现在整个Action是否要返回结果都由用户自己来决定.可是在现在的开发之中(Struts2.x比Struts1.x最 优秀的地方在于它支持Annotation配置)都会使用Annotation来完成,一旦使用了Annotation,那么无法配置method参数.如果现在无法配置method参数,那么我们就需要换另外一种方式访问.
<action name="NewsAction" class="cn.zwb.action.NewsAction" >
</action>
此时可以利用"!"完成,例如:要访问增加操作"NewsAction!insert.action",修改:"NewsAction!update.action"
总结
可以发现在Struts2.x中的多业务处理是现在为止遇见的最简单,而且要求最不固定的实现形式,例如:你的方法可以根据你自己的需要选择是否抛出异常,是否返回跳转