Struts2多业务处理
- 所谓的多业务处理指的是一个Action可以同时处理多种请求,对于多业务处理有两种方式.
- 定义一个News的vo类
public class News implements Serializable {
private Integer nid;
private String title;
//getter和setter方法
}
- 定义一个NewsAction类
- 如果一个Action中要处理多个操作业务,那么一定不要复写execute()方法
package mao.shu.action;
import com.opensymphony.xwork2.ActionSupport;
import mao.shu.vo.News;
public class NewsAction extends ActionSupport {
private News news = new News();
public void setNews(News news) {
this.news = news;
}
public News getNews() {
return news;
}
public String add(){
System.out.println("新的news对象创建成功"+this.news);
return null;
}
public String edit(){
System.out.println("新的news 对象修改成功:"+this.news);
return null;
}
public String get(){
System.out.println("获取news 对象成功:"+this.news);
return null;
}
public void remove(){
System.out.println("删除news 对象成功:"+this.news);
}
}
-
业务方法应该为public描述,否则
-
当使用多业务处理之后,每一个业务处理方法可以返回结果也可以不返回结果.
-
第一种多业务配置(不推荐使用)
-
使用通配符的方式
-
修改struts.xml文件
<package name="root" namespace="/" extends="struts-default">
<action name="NewsAction_*" class="mao.shu.action.NewsAction" method="{1}">
</action>
</package>
- 访问add()方法:http://localhost:8080/DisProject/NewsAction_add.action
- 后台输出
- 访问 edit()方法
-
在Action中,每一次用户发送请求之后实际上都会实例化新的Action类对象.
-
零配置(推荐做法)
-
需要注意的是使用该方法动态调用不同的方法,需要开启struts动态调用方法的配置,否则将无法动态调用方法
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
- 修改struts.xml文件
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="root" namespace="/" extends="struts-default">
<action name="NewsAction" class="mao.shu.action.NewsAction"/>
</package>
</struts>
-
访问add()方法http://localhost:8080/DisProject/NewsAction!add.action
-
后台输出
- 结论:直接使用"Action名称! 方法名称.action"的形式实现多业务处理会更加的方便.
Struts2与Ajax
- 实现数据的列表操作,使用JSON实现数据的实现列表操作是最方便的,前台要使用DOM处理操作,使用jQuery是最方便的.
- 在使用json开发包的时候要注意开发包的冲突问题
- 在NewsAction里面模拟实现新闻列表
public void list() throws Exception{
ServletActionContext.getRequest().setCharacterEncoding("UTF-8");
ServletActionContext.getResponse().setCharacterEncoding("UTF-8");
ServletActionContext.getResponse().setContentType("text/html");
JSONArray jsonArray = new JSONArray();
for(int x = 0; x < 10; x++){
News news = new News();
news.setNid(x);
news.setTitle("新闻标题"+x);
jsonArray.add(news);
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("allNews", jsonArray);
ServletActionContext.getResponse().getWriter().print(jsonObject);
}
- 在前台页面接收并且进行数据的DOM处理
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":"
+ request.getServerPort()+path+"/";
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<base href="<%=basePath %>"/>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$.post("NewsAction!list",{},function(data){
//清空表格原数据
$("#myTable tr:gt[0]").remove();//删除所有数据
for(var x =0;x < data.allNews.length;x++){
var nid = data.allNews[x].nid;
var title = data.allNews[x].title;
$("#myTable").append("<tr><td>"+nid+"</td><td>"+title+"</td></tr>");
}
},"json");
});
</script>
</head>
<body>
<table border="1" id="myTable">
<tr>
<td>编号</td>
<td>标题</td>
</tr>
</table>
</body>
</html>
- Struts2.x帮助用户隐藏了许多具体的实现细节,实现起来也会方便许多