`
zhangfeilo
  • 浏览: 399861 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

struts2,json,prototype异步请求

阅读更多

1、index.jsp

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>使用JSON插件</title>
<script src="prototype-1.6.0.3.js" type="text/javascript">
</script>
<script src="json2.js" type="text/javascript">
</script>
<script type="text/javascript">
 function gotClick()
 {
                alert('ss');
  //请求的地址
  var url = 'JSONExample.action';
  //将favorite表单域的值转换为请求参数
  var params = Form.serialize('form1');
  //创建Ajax.Request对象,对应于发送请求
  var myAjax = new Ajax.Request(
  url,
  {
   //请求方式:POST
   method:'post',
   //请求参数
   parameters:params,
   //指定回调函数
   onComplete: processResponse,
   //是否异步发送请求
   asynchronous:true
  });
 }
    function processResponse(request)
 {
  //使用JSON对象将服务器响应解析成JSON对象
  var res = JSON.parse(request.responseText);
  //遍历JSON对象的每个属性
  for(var propName in res)
  {
   $("show").innerHTML += propName + " --> " 
    + res[propName] + "<br />";
  }  
 } 
</script>
</head>
<body>
<form id="form1" name="form1" method="post">
field1:<input type="text" name="field1" id="field1"/><br />
field2:<input type="text" name="field2" id="field2"/><br />
field3:<input type="text" name="field3" id="field3"/><br />
<input type="button" value="提交" onClick="gotClick();"/>
</form>
<div id="show">
</div>
</body>
</html>

 2、S<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
 <constant name="struts.i18n.encoding" value="UTF-8"/>
 <package name="example"  extends="json-default">
  <action name="JSONExample" class="lee.JSONExample">
   <result type="json"/>
  </action>
  <action name="">
   <result>.</result>
  </action>
 </package>
</struts>

3、JSONExample Action类

 

package lee;

import java.util.HashMap;
import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.googlecode.jsonplugin.annotations.JSON;
 
public class JSONExample
{
 //模拟处理结果的属性
    private int[] ints = {10, 20};
    private Map map = new HashMap();
    private String customName = "顾客";
 //封装请求参数的三个属性
    private String field1;
    private String field2;
    //没有setter和getter方法的字段不会被序列化
    private String field3;
 public String execute()
 {
  map.put("name", "李刚");
  return Action.SUCCESS;
 }
 //使用注释语法来改变该属性序列化后的属性名
 @JSON(name="newName")
 public Map getMap()
 {
  return this.map;
 }
 //ints属性的getter方法
 public int[] getInts()
 {
  return this.ints;
 }

 //customName属性的setter和getter方法
 public void setCustomName(String customName)
 {
  this.customName = customName;
 }
 public String getCustomName()
 {
  return this.customName;
 }
 //field1属性的setter和getter方法
 public void setField1(String field1)
 {
  this.field1 = field1;
 }
 public String getField1()
 {
  return this.field1;
 }
 //field2属性的setter和getter方法
 public void setField2(String field2)
 {
  this.field2 = field2;
 }
 public String getField2()
 {
  return this.field2;
 }
 

 

}

 5.如果按照3中的配置。你会发现前台返回的json字符串,是把action中的所有属性全部转化为json字符串返回给浏览器了(甚至有时候返回不了结果,也不报错,后台执行了,但前台执行不到callback function),但是我们有时候需要根据实际情况返回部分结果,如何对json的结果进行定制输出呢?result提供了一些参数替你解决这个问题,一般情况下用的最多的就是includeProperties 参数和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。 
6.includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。这个参数直接返回对象的json数据,前台不需要eval转换,<param name="root">result</param>则不同,需要前台进行eval转换 
如:输出person的所有属性 
<result type="json">   
   <param name="includeProperties">person.*, person\.name</param>   
</result>   
7.excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties 
8.输出一个JSON List列表 
<action name="list" class="testAction" method="list">     
<result name="success" type="json"> 
<param name="includeProperties"> 
list\[\d+\]\.Id,list\[\d+\]\.user\.userName 
</param> 
</result>        
</action>   
其中list是action中的一个List类型的属性 
list\[\d+\]\.Id表示,list中存储的对象0..end的Id属性(list中存储的对象必须有Id属性)。 
list\[\d+\]\.user\.userName就表示list中的对象中的user对象的userName属性 
9.为什么要用includeProperties或者excludeProperties 参数: 
主要是为了过滤掉接口,pojo的set、list、其他对象等不需要的数据防止循环取其他对象或找不到。如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其他对象有list、set,其返回结果...有可能是死循环,无法返回 
10.总结: 
action中避免使用get开头的action方法,去掉action中的接口的get方法 
为json类型的result配置includeProperties, excludeProperties等参数. 

 

0
1
分享到:
评论

相关推荐

    struts2 json Ajax 整合所需全部jar包.zip

    lib目录下的文件可能包括Struts2的核心库、JSON处理库以及可能的Ajax支持库,如jQuery或Prototype。这些库可能包括: 1. `struts2-core.jar`: Struts2的核心库,提供了Action、Interceptor、Result等核心组件。 2. ...

    struts2-json-plugin-2.3.8.jar

    4. **与AJAX集成**:与jQuery、 Prototype等库配合,实现异步请求和响应,提升用户体验。 5. **自定义结果类型**:允许开发者定义自己的JSON结果类型,以满足特定需求。 **使用方法:** 在Eclipse中,这个jar包可以...

    JSON实例(ajax+struts)

    通过AJAX,前端可以异步地向服务器发送请求,获取JSON数据,然后在不刷新整个页面的情况下更新部分视图。而Struts框架则负责处理请求,调用相应的业务逻辑,并以JSON格式返回结果。这种方式提高了Web应用的响应速度...

    Struts 2与AJAX

    1. **无刷新表格**:通过AJAX请求获取服务器数据,Struts 2处理请求并返回JSON数据,然后更新页面上的表格,无需整个页面刷新。 2. **表单验证**:使用Struts 2的拦截器进行服务器端验证,同时通过AJAX实时反馈...

    struts2的详细资料

    开发者可以使用Struts2的Ajax插件,如JQuery插件,或者直接利用JavaScript库(如jQuery或 Prototype)来发送AJAX请求。在Action类中,可以定义一个特殊的方法处理AJAX请求,并返回JSON对象,然后前端JavaScript代码...

    struts2帮助文档

    9. **AJAX支持**:通过使用S2-Plugin,Struts2可以方便地与jQuery、Prototype等JavaScript库集成,实现异步数据交换,提升用户体验。 10. **测试支持**:Struts2提供了JUnit插件,使得单元测试和集成测试变得更加...

    struts2+ajax详解pdf清晰

    在《struts2+ajax详解》这本书中,你将深入学习这两种技术的结合使用,包括配置、Action编写、Ajax请求的处理以及如何在Struts2中返回JSON数据等内容。通过阅读13 struts2.0 & ajax(1).pdf和14 struts2.0 & ajax(2)....

    Struts与Ajax.rar

    5. **Struts2拦截器**:Struts2的拦截器机制在处理Ajax请求时同样起作用,开发者可以自定义拦截器来处理请求前后的逻辑,如身份验证、数据验证等。 6. **Action和Result配置**:在struts.xml配置文件中,开发者可以...

    ajax框架与struts框架的最佳结合讲解

    3. **JSON响应**:Struts2支持JSON结果类型,可以直接将Action的返回值转换为JSON格式,前端通过Ajax请求获取这个JSON数据,然后动态更新DOM元素。 4. **分离视图**:利用Ajax,我们可以将视图部分分解为多个独立的...

    ajax struts 例子

    2. **Ajax原理**:Ajax的核心是JavaScript,它通过XMLHttpRequest对象向服务器发送异步请求,获取服务器响应,然后动态更新DOM元素,实现页面局部刷新。XML虽然在名称中,但实际传输的数据可以是JSON、HTML或其他...

    ajax-struts

    "工具"可能指的是开发者在整合Ajax与Struts时可能会用到的辅助库或插件,例如jQuery、Prototype等JavaScript库,或者Struts的特定扩展如Ajax(Struts2)插件。 【文件名列表】: 1. **gpl.txt** - 这个文件可能是GNU ...

    Ajax+struts用户验证

    2. **创建Struts Action**: 在Struts中,创建一个处理用户查重请求的Action类。该类会接收到前端发送的用户名,查询数据库中是否存在相同的用户名。 3. **配置Struts.xml**: 配置Struts的配置文件,定义一个...

    ajax整合struts

    2. **Struts Action响应**:在服务器端,Struts Action需要处理Ajax请求,返回JSON或XML数据,而不是跳转到新的页面。 3. **配置Action**:在`struts-config.xml`中,为Ajax请求配置特定的Action,设置返回类型为...

    stuct ajax

    3. **Action的Ajax响应**:在Struts2中,Action类可以被配置为返回XML、JSON等格式的数据,这些数据可以作为Ajax请求的响应。这使得服务器端的业务逻辑可以直接返回部分页面更新所需的数据,而不是整个HTML页面。 4...

    Struts On Ajax

    1. **Ajax基础**:首先,书中会介绍Ajax的基本原理,包括XMLHttpRequest对象、JavaScript异步请求、DOM操作以及JSON数据格式。这些都是实现Ajax功能的核心技术。 2. **Struts框架概览**:讲解Struts的工作原理,...

    SSI中使用Ajax进行操作的例子(prototype.js)

    添加完成后,Action可以通过Struts2的JSON插件或自定义Result类型将响应封装为JSON格式,方便Prototype.js解析。 总结来说,本示例通过整合SSI、Ajax(Prototype.js)以及后端的Struts2、Spring和Ibatis框架,展示...

    struts+ajax学习

    Ajax通过JavaScript库(如jQuery、Prototype等)来实现与服务器端的通信,通常使用XMLHttpRequest对象发送异步请求。开发者可以通过Ajax实现无刷新的用户体验,提高网页的交互性和响应速度。例如,当用户在页面上...

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)--Chapter3

    3. **Ajax的应用**:学习如何使用jQuery或其他库(如 Prototype 或 AngularJS)来创建Ajax请求,以及如何在服务器端处理这些请求,并返回JSON或XML数据给前端。 4. **异常处理和事务管理**:了解如何在Spring中配置...

Global site tag (gtag.js) - Google Analytics