我想使用 Scope 拦截器在我的 Struts2(2.2.3.1) 应用程序中实现类似向导的功能。
我的 struts.xml 文件如下:
<action name="actionA class="classA" method="methodA">
<interceptor-ref name="basicStack" />
<interceptor-ref name="scope">
<param name="session">stringA</param>
<param name="key">consultGuides</param>
<param name="type">start</param>
</interceptor-ref>
<result>/resultA.jsp</result>
</action>
<action name="actionB" class="classA" method="methodB">
<interceptor-ref name="scope">
<param name="session">stringA, listA</param>
<param name="key">consultGuides</param>
</interceptor-ref>
<interceptor-ref name="basicStack" />
<result>/resultB.jsp</result>
</action>
....
....
“resultA.jsp”提交给填充“listA”的“actionB”。但是现在如果我按下后退按钮(到达 resultA.jsp,其中 resultA.jsp 只是从其缓存加载到浏览器而不向服务器发出新请求)并对列表进行任何更改,新条目将附加到“listA”而不是完全替换它。
修改“listA”的“resultA.jsp”中的代码是
<s:iterator value="listB" status="statusB">
<li>
<a title="%{varA}">
<s:checkbox name="listA.id" fieldValue="%{varB}" />
</a>
</li>
</s:iterator>
我没有实现 SessionAware,只是依靠 scopeInterceptor 将 listA 提供给会话。
如何让它用请求中的新列表替换“listA”?