学习目标:
1、了解Struts2对json的解析
学习过程:
一、struts2对json的支持
1、导入json插件包
首先导入struts2-json-plugin-2.3.16.jar包。
2、继承json-default包
使用MyEclipse打开struts-plugin.xml文件,查看内容如下:
<package name="json-default" extends="struts-default">
<result-types>
<result-type name="json"
class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json"
class="org.apache.struts2.json.JSONInterceptor"/>
<interceptor name="jsonValidation"
class="org.apache.struts2.json.JSONValidationInterceptor"/>
<!-- Sample JSON validation stack -->
<interceptor-stack name="jsonValidationWorkflowStack">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel</param>
</interceptor-ref>
<interceptor-ref name="jsonValidation"/>
<interceptor-ref name="workflow"/>
</interceptor-stack>
</interceptors>
</package>
有上面的代码可见,我们要使用json插件定义的result-type类型,就需要继承json-default。我们定义一UserAction代码如下:
public class UserAction extends ActionSupport {
private List<Employee> employees;
private EmployeeBiz employeeBiz = new EmployeeBiz();
public String listuser() {
employees = employeeBiz.getAll();
return SUCCESS;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
3、定义xml文件如下:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="json-default">
<action name="listuser" class="com.action.UserAction" method="listuser">
<result type="json">
<param name="root">employees</param>
</result>
</action>
</package>
</struts>
你可以查看这个action。就可以看到该employees对象已经是以json显示的。前台的jquery和上一节的使用就一样了,只是url改成这个action路径
二、struts2的ajax标签
1、简介
要使用struts2的ajax标签在新的版本中已经放在struts2-dojo-plugin-2.3.16.jar标签中了,所以现在需要先导入这个包。在页面上导入一下标签:
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
在html的<head>标签中需要写上以下代码:
<sx:head />
2、示例
struts2定义了很多ajax标签,使用都比较简单,但是和jquery等一些js客户端的ajax框架相比,灵活性就比较差点,所以这里就不做详细的介绍,具体大家可以查看官方文档:
http://struts.apache.org/release/2.3.x/docs/ajax-tags.html
在这里我们就举div标签简单讲解一下,其他大家可以自己阅读这个文档。在UserAction中新建一个now方法,用户获得当前时间:代码如下:
private String now;
public String now() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
now = sdf.format(date);
return SUCCESS;
}
public String getNow() {
return now;
}
public void setNow(String now) {
this.now = now;
}
新建test.jsp页面只是用于显示这个now,代码如下:
<body>
${now }
</body>
xml配置如下:
<action name="now" class="com.action.UserAction" method="now">
<result>/test.jsp</result>
</action>
可见这也并没有什么特殊的地方。下面在页面异步的访问这个action,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<sx:head />
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<sx:div href="now.action" loadingText="加载中..."></sx:div>
<sx:div href="now.action" loadingText="加载中..." updateFreq="500"></sx:div>
</body>
</html>