Struts2.x实例应用

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>

在这里插入图片描述

  • 访问 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帮助用户隐藏了许多具体的实现细节,实现起来也会方便许多
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值