您的位置:首页 > 编程语言 > Java开发

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

2012-12-28 23:56 399 查看


比如,当我要添加一个信用卡的时候,我需要信用卡的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>

文章来源:http://blog.csdn.net/mengfanpp/article/details/2200309
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐