0

スコープインターセプターを使用して、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を実装しておらず、listAをセッションにフィードするためにscopeInterceptorに依存しているだけです。

リクエスト内の「listA」を新しいリストに置き換えるにはどうすればよいですか?

4

1 に答える 1

0

ブラウザの戻るボタンまたは進むボタンをクリックした後にキャッシュされたページを許可しないようにするには、http 応答にいくつかのヘッダーを追加してみてください。これにより、戻るボタンまたは進むボタンをクリックするたびにキャッシュがクリアされます。

これをインターセプターに追加すると、これは非常に効果的です。

response.setHeader("Cache-Control", "no-cache, no-store"); //HTTP 1.1
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0); //prevents caching at the proxy server   

これにより、戻るボタンを押してもキャッシュされたページは読み込まれず、サーバーに新しいリクエストが送信されます。これで問題が解決するはずです。

于 2012-08-24T18:22:34.527 に答える