Java 我如何避免;连锁店;在Struts2的这种情况下?
我有一个名为Java 我如何避免;连锁店;在Struts2的这种情况下?,java,struts2,Java,Struts2,我有一个名为ShowData的操作,它从数据库中恢复数据并将其放入jsp struts.xml ... <action name="ShowData" class="foo"> <result>foo.jsp</result> </action> ... 现在我想给数据添加一些验证。如果DoSomething的返回类型如下:foo.jsp我将丢失在ShowData操作中恢复的数据,但是验证工作正常,用户先前的输入和错误将显示在jsp页面中
ShowData
的操作,它从数据库中恢复数据并将其放入jsp
struts.xml
...
<action name="ShowData" class="foo">
<result>foo.jsp</result>
</action>
...
现在我想给数据添加一些验证。如果DoSomething
的返回类型如下:foo.jsp
我将丢失在ShowData
操作中恢复的数据,但是验证工作正常,用户先前的输入和错误将显示在jsp页面中
另一方面,我知道我可以使用chain
,执行类似ShowData
的操作,然后使用MessageStoreInterceptor恢复数据(但我仍然不知道如何恢复用户在输入中引入的以前的数据)。但这是一个解决方案,我试图避免,因为我读到使用链不是一个好主意
那么,在这种情况下,如何在不丢失任何数据和不使用chain的情况下添加一些验证呢?对于您来说,一个选项是针对您以前使用相同名称的操作恢复的每个数据声明隐藏变量。 第二个选项如果要使用Chain,则可以在struts.xml文件中使用重定向,并通过struts.xml本身发送恢复的数据,例如:
<action name="ShowData" class="foo">
<result>foo.jsp</result>
<result name="redirect" type="redirect">
<![CDATA[paxAcctCharge.do?value1=${value1}&value2=${value2}]]>
</result>
</action>
foo.jsp
希望这会有所帮助。如果您的问题只是在第一个操作中检索数据库数据,那么您有一些选择
Preparable
,让这两个操作使用适当的服务检索数据prepare
方法归根结底,如果您仅将chain用于数据检索,这是一个坏主意--这正是
Preparable
所针对的场景,并消除了操作之间的耦合。如果我这样做,我将失去验证,不是吗?是的,您将失去第一个操作的验证,但仍然可以对第二个操作进行验证,但我认为这很好,因为如果您使用隐藏变量,其中的值已经过验证,现在您只需要验证另一个页面的值,这很容易完成,我想。。。。
<action name="ShowData" class="foo">
<result>foo.jsp</result>
<result name="redirect" type="redirect">
<![CDATA[paxAcctCharge.do?value1=${value1}&value2=${value2}]]>
</result>
</action>