SSH开发,使用标准的方式,在显示和保存中都发现数据残留问题。
例1
bean:
User
private String name;
get{} set{} ......
Action:
- Java code
private String name; private User user; public String getName() { return name; } public void setName(String name) { this.name = name; } public User getUser() { return user; } public void setUser(User task) { this.user = user; } ...... public String getUser() throws Exception { user=userService.findByName(name); return "show"; } ......
Jsp:
- HTML code
<s:if test="user!=null"> <s:property value="user.name" /> </s:if>
先在这申明,Spring注入等之类都是正常的,并没有SSH框架衔接问题。
以上代码通过name取得User。这个Action并不是页面打开时就执行的,是需要人为点击才执行。
问题是,第一个用户打开这个页面,默认是没执行getUser的,这个页面也不显示user.name,这正常,当点击执行后,这个用户能正常得到数据。可另一个用户,即使不在同一台电脑,不是同一个帐号,打开同样的页面也显示出这个user.name值了,应该说第2个人并没有执行getUser(),<s:if test="user!=null">不该通过的,感觉好像user成了全体变量了。
例2
bean相同
处理User增加操作。
Action:(不是同一个Action)
- Java code
private String name; private User user; public String getName() { return name; } public void setName(String name) { this.name = name; } public User getUser() { return user; } public void setUser(User task) { this.user = user; } public String UserAdd() throws Exception { User user=new User(); user.setName=name; userService.save(user); return("add") {
JSP:
- HTML code
...... <form method="post" action="add" id="add"> <s:textfield name="name"/> <button type="submit">保 存</button> </form> .....
同样是2个人不同电脑操作,第一个点保存时一切正常,第2个人,直接打Url:"xxxx/add",发现虽然没输入任何数据,但同样将第1个人的数据重新保存进去了。
如果第2个人也正常操作添加记录,这时发现保存了自己相同的2条记录,我跟踪了一下,发现当第2个人保存时,这个UserAdd操作了2次。
真是头大了,不知道错在哪了?
------解决方案--------------------
多半是action属性共享了。
在配置struts的action bean时加一个scope="prototype"
如:
- XML code
<bean id="a" class="cn.x.x.x.xAction" scope="prototype">