1.1.1   Action利用struts2-json-plugin-X.X.X.jar响应Json格式信息:

1.      function removerecordbyid(recordid){

2.              $("#showallrecord table tr").each(

3.              function(){

4.                var seq=parseInt($( this ).children( "td" ).html());

5.                var thisrecord =  this ;

6.                if(seq==recordid)

7.                  if(confirm( "您确认运行删除操作么?")){

8.                      $.ajax({

9.                          type: "POST",

10.                       url:"removeRecordById.action",

11.                       dataType:"json",

12.                       data:{"msg.id":recordid},

13.                       success:function(json){

14.                           if(json.status==4){

15.                               alert("删除失败,仅仅有提交留言的ip才干删除" );

16.                           }else{

17.                               $(thisrecord).remove();

18.   //                          alert("删除成功");

19.                           }

20.                       },

21.                       error:function(){

22.                           alert("del error");

23.                       }

24.                   });

25.               }

26.           });

27.       }

Action代码(做了简化)

1.      public   class  CrudMsgAction  extends ActionSupport{

2.          private Record msg;

3.          private   int index;

4.          private RecordService recordService;

5.          private List<Record> records;

6.          private   int  status = 0 ;

7.          private   int page =  0 ;

8.

9.          @JSON (serialize= false)

10.       public RecordService getRecordService() {

11.           return recordService;

12.       }

13.

14.       /**

15.        * 返回全部记录的JSON数据

16.        * @return list . All of the record.

17.        * @throws Exception

18.        */

19.       public String listAllRecord()  throws  Exception{

20.           List<Record> list = recordService.listAllRecord();

21.           records = list;

22.           return SUCCESS;

23.       }

24.

25.       public String listAllRecordByPage()  throws Exception{

26.           List<Record> list = recordService.listAllRecord(page);

27.           records = list;

28.           return SUCCESS;

29.       }

30.

31.       /**

32.        * 插入记录

33.        * @return update the view with AJAX when struts2 action return

34.        * @throws Exception

35.        */

36.       public String listRecordByIndex()  throws  Exception{

37.           List<Record> list = recordService.listAllRecord();

38.           this.msg = list.get( this .getIndex());

39.

40.           return SUCCESS;

41.       }

42.       /**

43.        * 删除相应id记录

44.        * @return field status. in order to update view with AJAX

45.        * @throws Exception

46.        */

47.       public String removeRecordById()  throws  Exception{

48.           String clientIpAddr = ServletActionContext.getRequest().getRemoteAddr();

49.           Record r = recordService.listRecordById(msg.getId());

50.           if(clientIpAddr.equals(r.getIpaddr())){

51.               recordService.removeRecordById(msg.getId());

52.               return SUCCESS;

53.           }

54.           status = 4;

55.           return SUCCESS;

56.       }

57.

58.       /**    获得分页数      */

59.       public String getPageSize()  throws  Exception{

60.           page = recordService.getPage();

61.           return SUCCESS;

62.       }

63.   }

上面代码中,使用了 @JSON(serialize=false),

除此之外,@JSON还支持例如以下几个域:

name:指定Action属性被序列化成JSON对象的属性名。

serialize:设置是否序列化该属性

deserialize:设置是否反序列化该属性。

format:设置用于格式化输出、解析日期表单域的格式。比如"yyyy-MM-dd'T'HH:mm:ss"

1.       < package   name = "json"  extends = "json-default" >

2.              <action   name = "ajaxRequest"   class ="com.jun.demos.struts2json.HelloWorld" >

3.                  <result   type = "json"   />

4.              </action >

5.              <action   name = "listIndexRecord"   class ="com.jun.demos.book.action.CrudMsgAction" >

6.                  <result   type = "json"   />

7.              </action >

8.              <action   name = "listAllRecord"   class ="com.jun.demos.book.action.CrudMsgAction"   method ="listAllRecord" >

9.                  <result   type = "json"   />

10.           </action >

11.           <action   name = "removeRecordById"   class ="CrudMsgAction"   method = "removeRecordById" >

12.               <result   type = "json"   />

13.           </action >

14.           <action   name = "getPageIndex"   class = " CrudMsgAction"  method = "getPageSize" >

15.               <result   type = "json"   />

16.           </action >

17.      </package >

配置该Action与配置普通Action存在小小的差别。

包继承了json-default包,而不再继承默认的default包,这是由于仅仅有在该包下才有json类型的Result。

Result能够使用 <param name="excludeProperties">page,index</param>排除Action 中这些都不返回的属性.

我们仅仅要输出person对象的name属性值,配置例如以下

1.     <result type="json">

2.         <param name="root">person.name</param>

3.     </result>

excludeNullProperties參数:表示是否去掉空值, 默认值是false

4.     <result type="json">

5.         <param name="excludeNullProperties">true</param>

6.      </result>

ignoreHierarchy參数:表示是否忽略等级,也就是继承关系,比方:TestAction继承于BaseAction,那么TestAction中返回的json字符串默认是不会包括父类BaseAction的属性值,ignoreHierarchy值默觉得true

7.      <result type="json">

8.          <param name="ignoreHierarchy">false</param>

9.      </result>

includeProperties參数:输出结果中须要包括的属性值,这里正則表達式和属性名匹配,能够用“,”切割填充多个正則表達式。 如:输出person的全部属性

10.   <result type="json">

11.       <param name="includeProperties">person.*, person/.name</param>

12.   </result>

比如:

<!-- 购房合同管理 namespace保证action的路径与jQuery兼容-->

<package
name="yushou_hetong"
extends="json-default"namespace="/pages/hetong">

<actionname="hetongAdd"class="hetongAddAction">

<result
name="list">/pages/hetong/qylist.jsp</result>

<!-- <resultname="add">/pages/hetong/add.jsp</result>
改用纯Html+jQuery-->

<result
name="add">/pages/hetong/add.html</result>

<result
name="Query">/pages/hetong/query.html</result>

<result
name="xiangmu">/pages/hetong/add/xiangmu.jsp</result>

<result
name="loupan">/pages/hetong/add/loupan.jsp</result>

<result
name="house">/pages/hetong/add/house.jsp</result>

<result
name="houseList">/pages/hetong/add/houseList.jsp</result>

<result
name="fukuan">/pages/hetong/add/fukuan.jsp</result>

<result
name= "success" 
type="json"
>

<param
name="ignoreHierarchy">false</param>

<param
name="includeProperties">errmsg</param>

</result>

</action>

</package>

二级联动标签

在struts2
标签s:doubleselect二级联动标签的基础上实现事件:第二级onchange时调用struts2 action,在action中查询一个名称,然后返回回来,此信息显示在页面上(这仅仅是给用户一个提示信息,不影响表单是否能提交)

须要加事件的二级联动jsp代码

1.         <td class="alignLeft" width="22%">   所属业务/项目名称:   </td>

2.         <td valign="top" class="alignLeft" width="20%">

3.             <s:doubleselect name="changeApplyFormBO.operationId" list="operationList" listKey="id"

4.             listValue="operationName" doubleList="operationSubProductList"

5.             doubleListKey="id" doubleListValue="prudName"  doubleName="changeApplyFormBO.productId"

6.             headerKey=""  headerValue="--- Please Select ---" />

7.              <span id="company" style="color:red"></span>

8.         </td>

我们须要在“项目名称”被改变的事件下调用函数,在生成的静态页面中查得它的id是cbApplySubmit_changeApplyFormBO_productId

说明一下,这里生成的id有一点规律,貌似。cbApplySubmit是本页面form表单的action,而changeApplyFormBO.productId是“项目名称”的name

以下给出定制下拉菜单事件的js

1.     <script>

2.

3.           $(function(){

4.               var obj=document.getElementById("cbApplySubmit_changeApplyFormBO_productId");

5.               obj.onchange=function(){

6.                var prodId=obj.value;

7.                var url="${contextPath}/assets/businessChange/ajaxGetCompany.do";

8.                var jsonProd={productId:prodId};    //JSON对象

9.                var prodStr=JSON.stringify(jsonProd);    //将JSON对象转变成JSON格式的字符串

10.              $.post(url,{json:prodStr},callback,"json");

11.             }

12.           function callback(json){

13.               $("#company").html(json.msg);

14.            }

15.        });

16.

17.   </script>

这里,无论是从浏览器端(JS,Ajax,Jquery等)发送给server端,还是从server端(Struts的Action,Servlet等)发送回client,发送的都是JSON格式的字符串

解释例如以下:

1.     var jsonProd={productId:prodId};

这句是组装JSON对象,这里非常easy,key是productId,value是页面选择的项目名称的id

1.     //将JSON对象转变成JSON格式的字符串

2.     var prodStr=JSON.stringify(jsonProd);

通过JavaScript内置对象JSON的stringify方法,将JSON对象转换成字符串。由于,我们传送给server端的要是JSON格式的字符串。

1.     $.post(url,{json:prodStr},callback,"json");

这一句,jquery用POST方法向server端发送数据,url是我们要调用的action全路径,而{json:prodStr}是我们要发送的数据(data),{json:prodStr},事实上也是一个JSON对象,Key:value的形式,注意,我们把prodStr这个json串发过去,在Action那里接收时,要接收“json”这个变量,这个变量的值就是我们发送的prodStr字符串。

回调函数(callback)是指server端成功返回时,在JS端运行的函数。最后一个參数“json”是返回数据类型的一种,另外,还有”text”、“xml”等

function callback(json){

1.             $("#company").html(json.msg);

2.          }

3.      });

company是span的id,请看最上面二级联动标签处。这个函数用来显示action中组装的json对象的value值

struts2 action类

1.     import org.json.JSONObject;

2.

3.     public class CBApplyAction extends ActionSupport {

4.         private IProductMng productMng;

5.         private String json;

6.         /**

7.          * 通过选择的项目名称,给出提示事业部名称的提示信息

8.          *

9.          * @return

10.        * @throws Exception

11.        */

12.       public void ajaxGetCompany() throws Exception {

13.           JSONObject jsonObj = new JSONObject(json); // 将JSON格式的字符串构造成JSON对象

14.

15.           String productId = jsonObj.getString("productId"); // 获取JSON对象中的productId属性的值

16.

17.           ProductBO prod = productMng.loadProduct(Integer.parseInt(productId));

18.           Integer companyId = prod.getCompanyId();

19.           CompanyBO comp = productMng.loadCompany(companyId);

20.           String companyName = "事业部为:" + comp.getName();

21.           json = "{msg:'" + companyName + "'}";    //构造JSON格式的字符串

22.           sendMsg(json);    //发送JSON格式的字符串回JS端

23.       }

24.

25.       public void sendMsg(String content) throws IOException{

26.           HttpServletResponse response = ServletActionContext.getResponse();

27.           response.setCharacterEncoding("UTF-8");

28.           response.getWriter().write(content);

29.       }

30.

31.       public String getJson() {

32.           return json;

33.       }

34.

35.       public void setJson(String json) {

36.           this.json = json;

37.       }

38.

39.       public void setProductMng(IProductMng productMng) {

40.           this.productMng = productMng;

41.       }

42.   }

JSONObject是我从json的站点http://www.json.org/java/index.html上下载了一些java文件,然后将这些.java文件打成一个jar包json.jar,放在项目lib里面
ajaxGetCompany方法没有像struts2 别的方法那样有返回值String,这里设的是void,因我们不须要不论什么跳转.

这里有个须要注意的,json= "{msg:'" + companyName + "'}"; companyName外面应该有引號括起来

 struts2 配置文件

1.     <action name="ajaxGetCompany" class="CBApplyAction"

2.         method="ajaxGetCompany">

3.     </action>

没有result

Struts2 整合jQuery实现Ajax功能(2)的更多相关文章

  1. Struts2 整合jQuery实现Ajax功能(1)

    技术领域非常多东西流行,自然有流行的道理.这几天用了jQuery,深感有些人真是聪明绝顶,能将那么多技术融合的如此完美. 首先明白个概念: jQuery是什么:是使用javascript语言开发的,用 ...

  2. 模仿JQuery封装ajax功能

    需求分析 因为有时候想提高性能,只需要一个ajax函数,不想引入较大的jq文件,尝试过axios,可是get方法不支持多层嵌套的json,post方式后台接收方式似乎要变..也许是我不太会用吧..其实 ...

  3. Struts2 使用jQuery实现Ajax

    在jQuery中将Ajax相关的操作进行封装,使用时只需在合适的地方调用Ajax相关的方法即可,相比而言,使用jQuery实现Ajax更加简洁,方便 1.$.Ajax()可以通过发送Http请求加载远 ...

  4. Spring+Hibernate+Struts2整合之实现登录功能

    前端代码: <form id="loginForm" action="${ pageContext.request.contextPath }/user_login ...

  5. 从零开始学习jQuery (六) AJAX快餐

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章讲解如何使用jQuery方便快捷的实现A ...

  6. Jquery和Ajax的关系!

    Jquery是一种JavaScript框架,而Ajax(Asynchronous JavaScript and XML)是异步JavaScript和XML. Jquery是JavaScript的框架, ...

  7. 份-城市,基于jQuery的AJAX二级联动,用Struts2整合AJAX【非数据库版】

    package loaderman.provincecity; import java.io.IOException; import java.util.LinkedHashSet; import j ...

  8. Struts2处理(jQuery)Ajax请求

    1. Ajax     Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)时一种创建交互式网页应用的网页开发技术,它并不是一项新的技术,其产生 ...

  9. 3、尚硅谷_SSM高级整合_使用ajax操作实现增加员工的功能

    20.尚硅谷_SSM高级整合_新增_创建员工新增的模态框.avi 1.接下来当我们点击增加按钮的时候会弹出一个员工信息的对话框 知识点1:当点击新增的时候会弹出一个bootstrap的一个模态对话框 ...

随机推荐

  1. Windows8和Windows Phone应用开发主题编码汇总

    原文:Windows8和Windows Phone应用开发主题编码汇总 在Windows 8和Windows Phone应用开发中经常需要自定义一些Windows Store应用风格主题,下面列举一些 ...

  2. hdu4185 Oil Skimming(偶匹配)

    <span style="font-family: Arial; font-size: 14.3999996185303px; line-height: 26px;"> ...

  3. 达到HTTP合约Get、Post和文件上传功能——采用WinHttp介面

    于<采用WinHttp实现HTTP协议Get.Post和文件上传功能>一文中,我已经比較具体地解说了怎样使用WinHttp接口实现各种协议. 在近期的代码梳理中,我认为Post和文件上传模 ...

  4. VOJ 1067 Warcraft III 守望者的烦恼 (矩阵高速功率+dp)

    主题链接 明显的 dp[n] = dp[n-k] + dp[n-k+1] + ... +dp[n-1]; 然后要用矩阵来优化后面的状态转移. 也就是矩阵 0 1 0 0    a     b 0 0 ...

  5. RFC 协议下载方法

    rfc官方网站:http://tools.ietf.org 举例说明: RFC7230是HTTP 1.1协议,此文档的URL为:http://tools.ietf.org/html/rfc7230 你 ...

  6. web自定义炫酷字体

    电脑有已经安装好的字体,但是如果你有特殊需要而要选择其他字体,则需要以下几个步骤 1.寻找适合你的字体 有下面几个站点提供字体下载: www.theleagueofmoveabletype.com w ...

  7. 实例教程Unity3D单例模式(一)通经常使使用方法

    unity3d教程 中的单例模式通经常使使用方法 通经常使使用方法是在相关类增加GetInstance()的静态方法,检查实例是否存在.假设存在,则返回.假设不存在.则返回一个"须要用游戏元 ...

  8. android 防止多次点击提交

    版权声明:本文博客原创文章.博客,未经同意,不得转载.

  9. Team Foundation Server 2015使用教程--默认团队权限说明

  10. C——联合体(共同体)总结

    联合体的特点 1.联合体是一种结构,在这个结构中能够不同类型的成员,但同一时间仅仅能存放当中的一种. #include <stdio.h> union Demo { int a; char ...