Struts 2, 值在验证失败回到原来页面的时候会丢失的解决方案

Struts 2, 值在验证失败回到原来页面的时候会丢失的解决方案

比如,当我要添加一个信用卡的时候,我需要信用卡的CardType, 这些数据是存在数据库中的,我要先通过action 的一个 create方法,取到信用卡的类型:

public  String create() {
        creditCardTypeList 
= this.creditCardTypeService.getList();
       
        
return SUCCESS;
}
 

Struts的配置文件:

< action  name ="create"  method ="create"  class ="example.CreditCardAction">       < result  name ="success" > input.jsp </ result >
</ action >

 

input.jsp

...
<
s:select  name ="creditCard.creditCardTypeId"  list ="creditCardTypeList"  listKey ="creditCardTypeId"  
                listValue
="ccType"   />
....

当提交input.jsp 的时候,Validate 检查没有通过,这时我需要回到input.jsp,此时应该下拉列表框的CreditType应该被保留,只需要在example.CreditCardAction 实现 Preparable接口,并实现prepare 方法,然后在add的 action中加上

< interceptor-ref  name ="prepare" />
< interceptor-ref  name ="defaultStack" />
就可以了
prepare方法:
public   void  prepare() {
    creditCardTypeList 
= this.creditCardTypeService.getList(); 
}

Add Acton:

< action  name ="add"  method ="add"  class ="example.CreditCardAction" >
    
< interceptor-ref  name ="prepare" />
    
< interceptor-ref  name ="defaultStack" />
    
< result  name ="input" > input.jsp </ result >             
    
< result  name ="success"  type ="redirect-action" >
            
< param  name ="namespace" > /credit </ param >
        
< param  name ="actionName" > list </ param >
    
</ result >
</ action >

  这样,在验证前将首先调用 prepare方法,即使失败了回到input.jsp页面creditCardType选择框的值仍然存在。

<interceptor-ref name="defaultStack"/> 中的 defaultStack 是我们在struts.xml 中配置的,其中我们注释掉了 <interceptor-ref name="prepare"/> 这样在example.CreditCardAction中的其他Action就不会首先执行prepare方法,只有加上了 <interceptor-ref name="prepare"/> 的才会去首先执行 prepare方法。

< package  name ="project-default"  abstract ="true"  extends ="struts-default" >
         
< interceptors >
         
< interceptor-stack  name ="defaultStack" >
                
< interceptor-ref  name ="exception" />
                
< interceptor-ref  name ="alias" />
                
< interceptor-ref  name ="servletConfig" />
                
<!--                            
                <interceptor-ref name="prepare"/>
                 
-->                               
                
< interceptor-ref  name ="i18n" />
                
< interceptor-ref  name ="chain" />
                
< interceptor-ref  name ="debugging" />
                
< interceptor-ref  name ="profiling" />
                
< interceptor-ref  name ="scopedModelDriven" />
                
< interceptor-ref  name ="modelDriven" />
                
< interceptor-ref  name ="fileUpload" />
                
<!--  
                <interceptor-ref name="checkbox">  
                       <param name="uncheckedValue">no</param>  
                </interceptor-ref>
                
-->
                
< interceptor-ref  name ="staticParams" />
                
< interceptor-ref  name ="params" >
                  
< param  name ="excludeParams" > dojo..* </ param >
                
</ interceptor-ref >
                
< interceptor-ref  name ="conversionError" />
                
< interceptor-ref  name ="validation" >
                    
< param  name ="excludeMethods" > input,back,cancel,browse </ param >
                
</ interceptor-ref >
                
< interceptor-ref  name ="workflow" >
                    
< param  name ="excludeMethods" > input,back,cancel,browse </ param >
                
</ interceptor-ref >
            
</ interceptor-stack >
       
</ interceptors >
    
</ package >   

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值