struts2中使用json插件实现ajax交互
json插件可以简单的实现ajax交互,避免了使用struts2-dojo-plugin.jar包时带来的struts2.x版本冲突问题。并且减少了使用ajax标签时需要的繁琐的配置包括web.xml中对dwr的servlet配置以及weib-inf下的dwr.xml文件的配置和多包的导入问题。最重要的是可以使用json这种数据交互格式可以将action中的状态信息格式化成json数据格式。然后返回到当前页面中,在当前页面中访问json对象中的属性,从而获得action中的所有状态信息。在是json时一定要注意按钮的单击事件触发的是js函数,通过js函数来将form提交到指定的action。此时并没有出现页面的跳转只是仍保留在当前页面。通过ajax内置的回调函数获得action执行数据。当数据从服务器响应完成返回到客户端时,客户端仍保留在当前请求页面。如果将提交按钮设置成submit 而不是普通的button那么在执行完所有的操作后,form会再次执行一次跳转到当前页面的空操作即刷新页面。这样就出现了执行结果在页面上瞬间闪过的bug。一定要避免这样的错误。
jsp页面代码如下:
<body>
<s:form id="form1" name="testForm" method="post">
<s:textfield name="field1" label="field1"></s:textfield><br/>
<s:textfield name="field2" label="field2"></s:textfield><br/>
<s:textfield name="field3" label="field3"></s:textfield><br/>
<input type="button" value="submit" onclick="getClick();"/>
</s:form>
<s:div id="show">test</s:div>
<script type="text/javascript" src="<%=basePath %>js/prototype-1.7.js"></script>
<script type="text/javascript">
function getClick(){
var url='jsonAction.action';
var params=Form.serialize('form1');
var myAjax=new Ajax.Request(url,{
method:'post',
parameters:params,
onComplete:processResponse,
asynchronous:true
});
}
function processResponse(request){
document.getElementById("show").innerHTML=request.responseText;
}
</script>
</body>
action类代码如下:
public class JsonAction extends ActionSupport {
private String field1;
private String field2;
private String field3;
private String costumName="custom";
private Map map=new HashMap();
private int ints[]={10,20};
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
public String getField3() {
return field3;
}
public void setField3(String field3) {
this.field3 = field3;
}
public String getCostumName() {
return costumName;
}
public void setCostumName(String costumName) {
this.costumName = costumName;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public int[] getInts() {
return ints;
}
public void setInts(int[] ints) {
this.ints = ints;
}
@Override
public String execute() throws Exception {
map.put("name", "****");
return SUCCESS;
}
}
struts.xml配置文件如下:
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="json" extends="json-default" namespace="/">
<action name="jsonAction" class="com.inspur.action.JsonAction">
<result name="success" type="json"></result>
</action>
</package>
</struts>
注意三点:ajax请求 发送时的数据编码必须是UTF-8
extends继承的不在是struts-default包而是json-default包
type=“json”并且在result标签中间没有跳转的视图资源
web.xml配置文件中注意如下就可以了:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
struts2中使用json插件实现ajax交互的更多相关文章
- Struts2之—集成Json插件实现Ajax
上篇博客介绍了Struts2中自己定义结果集实现Ajax,也分析了它的缺点:这样自己定义的结果集,写死了,不能做到client须要什么数据就传什么数据:Struts2之-自己定义结果集实现aja ...
- JSON(五)——同步请求中使用JSON格式字符串进行交互(不太常见的用法)
在同步请求中使用JSON格式进行数据交互的场景并不多,同步请求是浏览器直接与服务器进行数据交互的大多是用jsp的标签jstl和el表达式对请求中的数据进行数据的渲染.我也是在一次开发中要从其它服务器提 ...
- Struts2中的JSON问题——后台返回JSON字符串到前台
最近做一个项目遇到一个比较棘手的问题,项目后台采用struts2+Hibernate3+Spring3,前台采用ExtJs4.笔者目前仍是一名大二学生吗,后台框架完全是毫无任何基础,从零学,现学现用. ...
- struts2中的json
这里放一个转载的struts2中json的详细应用和范例, http://yshjava.iteye.com/blog/1333104,这是个人在网上看到的很用心也很详细的一份关于struts2中js ...
- 在JavaScript中使用json.js:Ajax项目之POST请求(异步)
经常在百度搜索框输入一部分关键词后,弹出候选关键热词.现在我们就用Ajax技术来实现这一功能. 一.下载json.js文件 百度搜一下,最好到json官网下载,安全起见. 并与新建的两个文件部署如图 ...
- 在JavaScript中使用json.js:Ajax项目之GET请求(同步)
1.用php编写一个提供数据的响应程序(phpdata.php) <?php $arr=array(1,2,3,4); //将数组编码为JSON格式的数据 $jsonarr=json_encod ...
- struts2中各个jar包作用
Struts2.3.4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方j ...
- struts2中的jar包
核心包: (后面数字是版本号,不同struts2版本,数字可能不一样.) struts2-core-2.1.8.1 struts2的核心jar包,不可缺少的 xwork-core-2.1.6 xwor ...
- struts2中各个jar包作用 (转)
Struts2.3.4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方j ...
随机推荐
- 【数学水题】【TOJ4113】【 Determine X】
题目大意: yuebai has a long sequence of integers A1,A2,-,AN. He also has such a function: F(x)=∑i=1N(⌊Ai ...
- .net TxetBox控件设置ReadOnly=True后台取值问题
1.为TxetBox添加onfocus=this.blur()进行模拟 2.通过 Request.From["TextBox"].Trim()取值; 3.后台CS文件设置TextB ...
- node.js url模块
URL url.parse(urlStr[, parseQueryString][, slashesDenoteHost]) url.format(urlObj) url.resolve(from, ...
- VMware linux 增加根目录空间 (使用图形分区工具gparted LiveCd)
写这篇文章的原因: 最近要给服务器Centos上的ruby版本升级,由于是第一次升级,不敢直接在服务器上操作. 所以在我的winxp上装了Vmware ,又在Vmware中装了Centos5.2. 用 ...
- sql中的split方法
ALTER function [dbo].[f_split](@SourceSql varchar(8000),@StrSeprate varchar(10))returns @temp table( ...
- Python基础之 urllib模块urlopen()与urlretrieve()的使用方法详解。
Python urllib模块urlopen()与urlretrieve()的使用方法详解 1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) ...
- android Mvp简单实用
View 对应于Activity,负责View的绘制以及与用户交互Model 依然是业务逻辑和实体模型Presenter 负责完成View于Model间的交互 模拟客户端的登录操作,并实现登录成功与登 ...
- 安卓使用spinner控件和pull解析实现全国省市县的三级联动
实现该功能主要有两个难点: 1.XML文件的Pull解析.由于XML文件的结构较为复杂,所以解析时要注意,划分XML文件的结构,根据结构建立相应的和集合.本例中需要建立三个类和三个对象.三个类分别为, ...
- 【Java 小实验】重写(覆写 Override)返回值类型能不能相同
背景 每次看到重写那里写着: 重写机制是指子类的方法的方法名.参数表.返回值与父类中被重写的方法都相同,而方法体不同. 而重载是: 方法名与父类中的相同,而参数表不同,则属于同名方法的重载. 本来的感 ...
- Android 使用PopupWindow实现弹出菜单
在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...