Struts2 的问题 异步请求访问Action方法出现bug

问题描述

Struts2 的问题 异步请求访问Action方法出现bugpublic class EnumConstAction extends BaseAction {EnumConstService enumConstService;WEnumConstTab selInfo;// 专门为初始化select 使用public WEnumConstTab getInfo() {return info;}public void setInfo(WEnumConstTab info) {this.info = info;}public EnumConstService getEnumConstService() {return enumConstService;}public void setEnumConstService(EnumConstService enumConstService) {this.enumConstService = enumConstService;}/** * 根据父级id和命名空间 * @return */public String findByFatherIdAndNamespace(){List<WEnumConstTab> list = null;if (selInfo.getId() != null && !"".equals(selInfo.getId())&& selInfo.getNamespace()!=null &&!"".equals(selInfo.getNamespace())) {list = enumConstService.findByFatherIdAndNamespace(selInfo.getId(),selInfo.getNamespace());} else {list = new ArrayList<WEnumConstTab>();}selInfo = null;this.getRequest().setAttribute(JSONSTRING, JSONArray.fromObject(list).toString());return JSON;}/** * 根据命名空间查找 * @return */public String findByNamespace(){List<WEnumConstTab> list = null;if (selInfo.getNamespace() != null && !"".equals(selInfo.getNamespace())) {list = enumConstService.findByNamespace(selInfo.getNamespace());} else {list = new ArrayList<WEnumConstTab>();}selInfo = null;this.getRequest().setAttribute(JSONSTRING, JSONArray.fromObject(list).toString());return JSON;}//--------------------------------------------------------------------} 当使用Ajax 同时调用 Action 里的 findByNamespace 方法和 findByFatherIdAndNamespace 方法时方法里的 selInfo 会变成 Ajax 里最后赋值的对象, jQuery.post("dnumConstAction_findByNamespace.action",{"selInfo.namespace":"AA"},function(data){}); jQuery.post("dnumConstAction_findByFatherIdAndNamespace.action", {"selInfo.namespace":"BB","selInfo.id":"11"}},function(data){});结果就会都返回 namespace="BB"的结果如何解决呢

解决方案

并发性问题, public synchronized void setInfo(WEnumConstTab info) { this.info = info; }
解决方案二:
一般每次请求都会新建一个线程进行处理的吧,selInfo不是共享的变量,按道理是不会出现并发性问题的public synchronized void setInfo(WEnumConstTab info) { this.info = info; } 另外如果真是并发的问题,这样木有用的,AA调用完set之后执行两个find的时候BB再set一把,还是会有问题的吧不如在两个find 和setSelInfo函数里都System.out.println一把看看输出值再不行,就把ajax那个改成同步的, 添加一个参数$.ajax({ url: "dnumConstAction_findByNamespace.action", data: {"selInfo.namespace":"AA"}, async:false, success: function(data){ }});

时间: 2024-10-27 16:31:36

Struts2 的问题 异步请求访问Action方法出现bug的相关文章

java实现HttpClient异步请求资源的方法_java

本文实例讲述了java实现HttpClient异步请求资源的方法.分享给大家供大家参考.具体实现方法如下: package demo; import java.util.concurrent.CountDownLatch; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.nio.client.DefaultHttpAsyn

struts2 sitemesh-struts2整合sitemesh无法访问action问题

问题描述 struts2整合sitemesh无法访问action问题 5C struts2版本2.3.24 sitemesh2.4.2应有的jar包都已加入web.xml <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> &

strus1关于action方法 疑问

问题描述 以前一直使用struts2 现在公司使用的struts1.2.7 ,在使用时 有个疑问1. struts1 中 的action 方法 是不是只能重写父类Action 的 execute() ?因为在struts2 中可以通过在struts.xml配置action的 method 属性来指定请求的action方法.而在struts1总在 struts-config.xml中,action配置好像没有method方法只有parameter属性, 如果不能配置的话 每个action类只能处理

可以运行测试的IOS同步请求、异步请求、GET请求、POST请求

1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获. 为简化起见,直接

全面解析iOS中同步请求、异步请求、GET请求、POST请求_IOS

先给大家分别介绍下iOS中同步请求.异步请求.GET请求.POST所代表的意思,然后在逐一通过实例给大家介绍. 1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.P

Struts2框架,表单请求到action出错,貌似找不到自定义action类中的方法。

问题描述 Struts2框架,表单请求到action出错,貌似找不到自定义action类中的方法. 关键代码如下: ${Msg.sendUser.username } 上面代码的意思是:把${Msg.sendUser}提交到action,赋值给 action类属性message的sendUser.(sendUser数据类型是User对象) 请求后提示找不到action中的自定义方法,但是我表单中的值换成下面 的,变成赋值给message的属性sendUser的属性username,就能成功. 是

javascript-怎么用ajax访问action中的方法

问题描述 怎么用ajax访问action中的方法 本来是跳转到新页面显示错误信息,现在需要在点击按钮时,就直接在原来的页面上弹出提示信息. action中的方法如下: public String sendEmail() throws Exception { MailBean mailBean = setMailBean(); try { if(!isWriteRight(mailBean,mailInfoFB.getTo())){ mailInfoFB.setSended(false); mai

$.ajax()请求Action方法

问题描述 Struts2+hibernate3.2+spring2.0:$.ajax()请求Action方法,开始一直可以请求,也能正常返回.后来在别的Action中添加一个属性,在applicationContext.xml中配置了一下,我再次请求登录的那个Action方法时,既不请求,也不返回,根本就没走进Action.以前曾遇到过一次这个问题,但是我重新建一个Action,却好了,这次又遇见了,总这样也不是个办法,哎--,郁闷好久了,一直不明什么原因,请各位多多指点. 解决方案 解决方案二

ASP.NET WebForm中异步请求防止XSRF攻击的方法

在ASP.NET MVC中微软已经提供了如何防止跨域攻击的方法.对于传统Webfrom中使用Handler来接受ajax的Post请求数据,如何来防止XSRF攻击呢.这里给大家提供一个简单地方法,和MVC中类似.   1.首先需要在你的站点中安装如下的nuget包.可以手动复制dll. Install-Package Microsoft.AspNet.WebPages -Version 2.0.20710 最新版本的Razor是3.0的,安装WebPages的时候,它依赖于Razor,所以对于f