本文开发环境是SSH2,ajax插件使用jQuery 1.2.6.js和json2.js
实现目的:
在struts2 标签s:doubleselect二级联动标签的基础上实现事件:第二级onchange时调用struts2 action,在action中查询一个名称,然后返回回来,此信息显示在页面上(这只是给用户一个提示信息,不影响表单能否提交)
由于struts2 doubleselect标签任何事件都不起作用,只能根据查看源文件中生成的id来定义它的onchange事件
jsp页面引入了jquery.js和json2.js
需要加事件的二级联动jsp代码
- <td class="alignLeft" width="22%">
- 所属业务/项目名称:
- </td>
- <td valign="top" class="alignLeft" width="20%">
- <s:doubleselect name="changeApplyFormBO.operationId" list="operationList" listKey="id"
- listValue="operationName" doubleList="operationSubProductList"
- doubleListKey="id" doubleListValue="prudName" doubleName="changeApplyFormBO.productId"
- headerKey="" headerValue="--- Please Select ---" />
- <span id="company" style="color:red"></span>
- </td>
我们需要在“项目名称”被改变的事件下调用函数,在生成的静态页面中查得它的id是cbApplySubmit_changeApplyFormBO_productId
说明一下,这里生成的id有一点规律,貌似。cbApplySubmit是本页面form表单的action,而changeApplyFormBO.productId是“项目名称”的name
下面给出定制下拉菜单事件的js
- <script>
- $(function(){
- var obj=document.getElementById("cbApplySubmit_changeApplyFormBO_productId");
- obj.onchange=function(){
- var prodId=obj.value;
- var url="${contextPath}/assets/businessChange/ajaxGetCompany.do";
- var jsonProd={productId:prodId}; //JSON对象
- var prodStr=JSON.stringify(jsonProd); //将JSON对象转变成JSON格式的字符串
- $.post(url,{json:prodStr},callback,"json");
- }
- function callback(json){
- $("#company").html(json.msg);
- }
- });
- </script>
这里,不管是从浏览器端(JS,Ajax,Jquery等)发送给服务器端,还是从服务器端(Struts的Action,Servlet等)发送回客户端,发送的都是JSON格式的字符串
- var jsonProd={productId:prodId};
这句是组装JSON对象,这里很简单,key是productId,value是页面选择的项目名称的id
- //将JSON对象转变成JSON格式的字符串
- var prodStr=JSON.stringify(jsonProd);
通过JavaScript内置对象JSON的stringify方法,将JSON对象转换成字符串。因为,我们传送给服务器端的要是JSON格式的字符串。
- $.post(url,{json:prodStr},callback,"json");
这一句,jquery用POST方法向服务器端发送数据,url是我们要调用的action全路径,而{json:prodStr}是我们要发送的数据(data),{json:prodStr},其实也是一个JSON对象,Key:value的形式,注意,我们把prodStr这个json串发过去,在Action那里接收时,要接收“json”这个变量,这个变量的值就是我们发送的prodStr字符串。
回调函数(callback)是指服务器端成功返回时,在JS端执行的函数。最后一个参数“json”是返回数据类型的一种,另外,还有”text”、“xml”等
- function callback(json){
- $("#company").html(json.msg);
- }
- });
company是span的id,请看最上面二级联动标签处。这个函数用来显示action中组装的json对象的value值
struts2 action类
- import org.json.JSONObject;
- public class CBApplyAction extends ActionSupport {
- private IProductMng productMng;
- private String json;
- /**
- * 通过选择的项目名称,给出提示事业部名称的提示信息
- *
- * @return
- * @throws Exception
- */
- public void ajaxGetCompany() throws Exception {
- JSONObject jsonObj = new JSONObject(json); // 将JSON格式的字符串构造成JSON对象
- String productId = jsonObj.getString("productId"); // 获取JSON对象中的productId属性的值
- ProductBO prod = productMng.loadProduct(Integer.parseInt(productId));
- Integer companyId = prod.getCompanyId();
- CompanyBO comp = productMng.loadCompany(companyId);
- String companyName = "事业部为:" + comp.getName();
- json = "{msg:'" + companyName + "'}"; //构造JSON格式的字符串
- sendMsg(json); //发送JSON格式的字符串回JS端
- }
- public void sendMsg(String content) throws IOException{
- HttpServletResponse response = ServletActionContext.getResponse();
- response.setCharacterEncoding("UTF-8");
- response.getWriter().write(content);
- }
- public String getJson() {
- return json;
- }
- public void setJson(String json) {
- this.json = json;
- }
- public void setProductMng(IProductMng productMng) {
- this.productMng = productMng;
- }
- }
JSONObject是我从json的网站http://www.json.org/java/index.html上下载了一些java文件,然后将这些.java文件打成一个jar包json.jar,放在项目lib里面
ajaxGetCompany方法没有像struts2 别的方法那样有返回值String,这里设的是void,因我们不需要任何跳转
这里有个需要注意的,json = "{msg:'" + companyName + "'}"; companyName外面应该有引号括起来
struts2 配置文件
- <action name="ajaxGetCompany" class="CBApplyAction"
- method="ajaxGetCompany">
- </action>
没有result
暂时没找到csdn传附件的地方
所用到的js文件和jar包在这里下载,我放到javaeye博客里去了
下载文件:
相关推荐
在本文中,我们将探讨两种在Struts2框架中返回JSON数据的方法。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端交互,尤其是在AJAX请求中。Struts2提供了一套方便的机制来支持JSON...
在Android开发中,与服务器进行数据交互是常见的...而`Struts2_JSON_Demo`可能是一个Struts2的项目,实现了返回JSON数据的Action。通过这两个示例,你可以更直观地学习和理解Android与Struts2之间JSON数据交换的过程。
本篇将详细讲解如何在Struts2中配置Action来返回JSON响应。 首先,我们需要了解Struts2的Result类型。默认情况下,Action会返回一个JSP页面作为结果,但通过配置,我们可以让Action返回JSON数据。这需要使用到一个...
在Struts2中,返回JSON(JavaScript Object Notation)数据类型是一种常见的需求,尤其是在开发AJAX或者前后端分离的应用时。JSON是一种轻量级的数据交换格式,它允许服务器向客户端发送结构化的数据,而无需解析...
1. 配置Struts2:在struts.xml配置文件中,为Action添加一个JSON结果类型,这样Struts2将会返回JSON响应。 2. 接收JSON数据:在Action类的setter方法中,使用@Param注解接收JSON参数。 3. 处理业务逻辑:在Action中...
当Action执行完毕后,可以返回一个JSON结果类型,Struts2会自动将Action的属性转换为JSON格式并返回给前端。 接着,我们讨论AJAX。AJAX是一种在不重新加载整个网页的情况下,能够更新部分网页的技术。在本资源中,...
本篇文章将详细讲解如何在Struts2中使用“json-default”拦截器来返回JSON数据。 首先,我们需要理解Struts2的拦截器(Interceptor)机制。拦截器是Struts2框架的核心组件之一,它们在Action执行前后执行特定的任务...
本篇文章将深入探讨如何在Struts2中通过注解实现返回JSON数据的功能。 首先,让我们理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web应用中...
在这里,使用`$.ajax()`方法设置请求参数,例如URL(指向你的Struts2 Action),请求类型(通常是POST或GET),以及期望的数据类型('application/json')。 4. **jQuery的Ajax回调**:定义一个成功的回调函数,当...
在本场景中,我们将探讨如何在Struts2中返回JSON数据,并在页面上使用jQuery库的`$.ajax`或`$.getJSON`方法来接收和处理这些数据。 首先,我们需要在Struts2中配置JSON结果类型。在`struts.xml`配置文件中,添加一...
启用插件后,你可以定义一个Struts2的动作(Action),并声明返回类型为`json`。例如: ```java public class MyAction extends ActionSupport { private String message; // Getters and Setters @Override ...
jsp通过Ajax无刷新获取Action返回的模拟数据,然后通过struts2转化成json数据返回页面....这里面Map,List,对象等等,一些常用的操作都有。主要的代码在Action和 json.js里面。适合新手入门
1. `struts2-json-plugin-x.x.x.jar`:这是Struts2的JSON插件,提供JSON动作结果类型和相关的拦截器,使得Action可以直接返回JSON响应。例如,如果Action返回一个Map或List,这个插件会自动将其转换为JSON格式。 2....
在Struts2中,我们可以配置Action类返回JSON类型的结果,这样当客户端(如Android应用)发起请求时,服务器会返回JSON格式的数据。这些数据可以包含对象、数组、字符串、数字等多种类型,非常适合移动设备上的数据...
`struts2-json-plugin`添加了JSON结果类型,当Action返回此类型时,会将结果转换为JSON格式。 2. **JSONResult类**:这是实现JSON结果类型的核心类,它继承自`com.opensymphony.xwork2.Result`接口。在执行过程中,...
这个插件允许开发者在Struts 2中轻松地创建能够返回JSON的Action,使得前端(通常使用JavaScript库如jQuery)可以获取到JSON数据并进行进一步处理。 现在我们来详细讨论这两个库在实际应用中的作用: 1. **json-...
这样,Struts2就能够识别`json`类型的结果,并使用`JSONResult`来将Action返回的数据转换成JSON格式。 #### 3. 定义Action方法 在Struts2中,Action类中的方法负责处理来自客户端的请求。为了返回JSON数据,可以...
在"struts2返回json格式的数据练习"这个实例中,我们将学习如何配置Struts2框架以支持JSON输出,并创建一个简单的示例来展示这一过程。 首先,我们需要在Struts2项目的`pom.xml`文件中添加JSON插件依赖。Struts2的...
在Struts2中,我们可以配置Action类来处理Ajax请求,并以JSON格式返回数据。 以下是一个简单的示例步骤: 1. **前端设置**: 在HTML页面中,使用jQuery发起Ajax请求。例如: ```javascript $.ajax({ url: ...