日期:2014-05-20  浏览次数:20801 次

struts2.1.6,页面提交,清空不了上次表单记录
最近使用Struts2.1.6+spring+hibernate开发系统。
在查询中出现以下问题:
其中在查询表上输入的查询条件为bkname=099,bkno为空
第一次点击查询按钮,可以查询到数据,后台的DEBUG信息为:
DEBUG c.o.x.i.ParametersInterceptor - Setting params bkname => [ 099 ] bkno => [ ] ec_crd => [ 10 ] ec_i => [ ec ] ec_p => [ 1 ] pageNO => [ ] pageSize => [ ] pager => [ ] textfieldForGoToPagerNo => [ ] 
但是在第二次查询的时候,就会报错,信息为:
DEBUG c.o.x.i.ParametersInterceptor - Setting params bkname => [ 099, 099 ] bkno => [ , ] ec_crd => [ 1 ] ec_i => [ ec ] ec_p => [ 1 ] pageNO => [ , ] pageSize => [ , ] pager => [ , ] textfieldForGoToPagerNo => [ , ] 

因此可以判断在第一次查询返回页面数据后,并没有对bean中的数据进行清空。代码如下:
---------------------------
model bean代码:
---------------------------
public class CmbkBean implements java.io.Serializable{

// Fields
private String id;
private String prtid;
private String bkno;
private String bkname;
private String bklvl;
private String supbkno;
private String bkadrs;
private String bktel;
private String rmk;
private String crtby;
private String crtdt;
private String crttime;
private String updtby;
private String updtdt;
private String updttime;


  set/get方法 省略.....
}
---------------------------
action代码,采用模型驱动方法
---------------------------
@Results( { @Result(name = "input", location = "/cmaum/bankInput.jsp"),
@Result(name = "list", location = "/cmaum/bank.jsp"),
@Result(name = "listForOut", location = "/cmaum/bankListForOut",type="redirect")})
public class BankAction extends BaseAction implements ModelDriven<CmbkBean> {
private CmbkBean cmbkBean =new CmbkBean();
private List<Cmbk> cmbkList;
private BankService bankService;
  @Action("/bankList")
public String list() throws Exception {
pager = initPager();
cmbkList = this.bankService.listCmbk(getModel().getBkname(),getModel().getBkno(), pager);
return "list";
}
}

当第一次执行查询,通过action中的list可以得到查询结果,但是第二次查询,就出现问题。

------解决方案--------------------
楼主看看是不是页面上多了bkname
------解决方案--------------------
在spring配置的action中加入 scope="prototype"
------解决方案--------------------
如上,可解决。
xml设置为 
<bean id="XXXX" class="com.xxxx.XXXX" scope="prototype">

或者 annotation 设置为

@Scope("prototype")