关于Strut2内置Json插件的使用

编程之家收集整理的这篇文章主要介绍了关于Strut2内置Json插件的使用编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

配置注意点:在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar)在struts.xml配置文件中,包需要继承json

配置注意点:

 

一、先来个简单示例,利用Struts2+jquery+JsON实现异步交互,返回一个字符串

1、index.Jsp

很简单的一个页面,利用AJAX异步向test1.action发送一个post请求,传递了一个参数name,然后把回调函数返回的值显示页面

 1 <%@ page language="java importjava.util.* pageEnCodingutf-8"%>
 2 <!DOCTYPE HTML PUBliC "-//W3C//DTD HTML 4.01 Transitional//EN">
 3 HTML 4     head 5         script type="text/JavaScript" src="${pageContext.request.contextpath}/Js/jquery-1.4.4.min.Js"></script 6         ="text/JavaScript" 7             $(document).ready(function(){
 8                 $.post(test1.action,{name:Balla_兔子},(data){
 9                     console.info(data);
10                     $(#info).HTML(data.info);
11                 });
12             
13             });
14         15     16 
17     body18         Hello,Struts2!div ID="info"div19     20 >

2、TestAction.java

因为页面发送了一个参数名为name参数在这我们属性注入的方式,给成员变量一个setter方法赋值,返回提供一个getter方法作为回调函数的返回值。

Struts2的Json插件认将值栈(root)的顶端对象返回(所有getter方法),在没有实现模型驱动类ModelDriven的前提下,值栈的顶端对象为Action(也就是返回Action里所有的getter方法,若有各别方法不想返回,只需要在该方法的上面添加一个@JsON(serialize=false)注解即可

如:

@JsON(serialize=false)
public String getAge() {
    return "我今年10岁了";
}

 

 1 package com.lcw.struts.Json;
 2 
import com.opensymphony.xwork2.ActionSupport;
 4 
 5 public class TestAction extends ActionSupport {
 6 
 7     private String name;    
 8      String info;
 9     
10      String getInfo() {
11         return "我是:"+name;
12     }
13 
14     voID setname(String name) {
15         this.name = name;
16 17 
18      String test1() {
19         return "success";
20 
21 22 }

struts.xml

<?xml version="1.0" enCoding="UTF-8" ?>
DOCTYPE struts PUBliC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd" 5 
 6 struts>    
 7         constant ="struts.i18n.enCoding" value="UTF-8"/>
 8         ="struts.devMode"="true"  9         ="strutsJson"="Json-default" namespace="/"10             action ="test1" class="com.lcw.struts.Json.TestAction"11                 >/index.Jsp12             action13         14 >

 

下面是页面效果:(这里只是简单举例,也可以实现一些业务逻辑功能,比如验证用户的账号,可以在Action调用持久层的数据查询,返回布尔值,在回调函数进行进一步操作)

二、下面来说下关于更为实用的实例,比如如何返回一个List集合,对象等复杂数据,在前台接受数据中,只能识别字符类型的信息,比如Xml,Json,HTML字符等,是无法识别List集合的,那我们应该怎么做呢?

TestAction.java

这次在Action加入了模型驱动类,然后定义了一个User类并提供了setter和getter方法,把该对象添加一个List集合里去,并提供getter方法以便返回数据。

 java.util.ArrayList;
 4  java.util.List;
 7  com.opensymphony.xwork2.ModelDriven;
 8 
 9 extends ActionSupport implements ModelDriven<User> {
10 
11     private User user = new User();
12 
13      User getModel() {
return user;
15 private List<User> List;
18 
public List<User> getList() {
20         22 
23      String test1(){
24         List = new ArrayList<User>();
25         User user = 26         List.add(new User("1","张三"));
27         List.add(new User("2","李四"28         29 30 
31 }

User.java

 com.lcw.struts.Json;

class User {

     String ID;
     String name;

     User() {
    }

     User(String ID,String name) {
        super();
        this.ID = ID;
         name;
    }

     String getID() {
         ID;
    }

     setID(String ID) {
         String getname() {
         setname(String name) {
         name;
    }

}

保持配置文件不变,我们来看页面看看结果:

打开fireBUG调试查看,会发现

 为何传递过来的数据会为空呢?不知道大家是否留意上文提到的一句话

Struts2的Json插件认将值栈(root)的顶端对象返回(所有getter方法),在没有实现模型驱动类ModelDriven的前提下,值栈的顶端对象为Action(也就是返回Action里所有的getter方法

我们上面实现了模型驱动类,也就意味着值栈的栈顶对象此时也不再是Action了,而是Model,所以返回的数据为空。那要怎么办呢?其实很简单,只需要我们改变认返回的战队对象就可以了,把它设置成Action。

DOCTYPE struts PUBliC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

>    
        />
        >
            ="test"="com.lcw.struts.Json.TestAction" method="test1">
                >
                    param ="root">actionparam>
        >

只要在result里添加一个参数root并设置成action就可以了,我们来看下此时的效果

这是我们就可以利用(data.List[x].name等)取出其中的数据了。

我们可不可以不要一起把所有的数据都返回回来,只返回部分数据呢?除了之前说的那个Json注解(只要@JsON注解,属性将永远不能参与 Json返回),其实Struts2为我们提供一个更灵活的方法,在struts.xml的配置文件里,我们也是可以根据所需设置的,例如:

1 ="includepropertIEs">List\[\d+\]\.name>

includePropertIEs代表要包含的参数,值为正则表达式,因为返回的数据是一个List集合,名为ListList[\d+].name(代表List下所有数组索引下的name属性) 上文的反斜杠是转义符号。(如果要返回模型驱动对象则是model[\d+])

下面是完整配置文件

struts.xml

12                     13                                             List\[\d+\]\.name
15                     16                 17             18         19 >

 

再看下此时的页面数据返回:

这样,我们想要的数据就可以筛选出来了。

 

总结

以上是编程之家为你收集整理的关于Strut2内置Json插件的使用全部内容,希望文章能够帮你解决关于Strut2内置Json插件的使用所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

SpringMVC文章

关于文件的上传,之前写过2篇文章,基于Struts2框架,下面给出文章链接:《关于Struts2的文件上传》:http://www.cnblogs.com/lichenwei/p/3927964.ht
要实现Struts2框架的文件上传,需要用到2个jar包commons-fileupload-1.2.2.jarcommons-io-2.0.1.jar由于文件解析Struts2内部已经帮我们做好了,
配置注意点:在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar)在struts.xml配置文件中,包需要继承json
接触过JAVA WEB开发的朋友肯定都知道Hibernate框架,虽然不否定它的强大之处,但个人对它一直无感,总感觉不够灵活,太过臃肿了。今天来说下Spring中关于JDBC的一个辅助类(JDBC T
很简单的一个东西,这里就不做过多介绍了,写一个小Demo,随手记录下。首先,在搭好SpringMVC工程环境之后,如果想用Spring自带的Json,需要额外的添加2个JAR包:1、jackson-c
Aspectj切入点语法定义在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut&quot;切入点&quot;例如定义切入点表达式 executio
SpringMVC学习记录 注意:以下内容是学习 北京动力节点 的SpringMVC视频后所记录的笔记、源码以及个人的理解等,记录下来仅供学习 第4章 SpringMVC 核心技术 4.2异常处理 S
SpringMVC拦截器
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注