25、struts2对json和ajax的支持

学习目标:

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值