これは、ブラウザの更新ボタンをクリックすると、アクションが再度実行されるという問題があります。おそらく、これはURLにそのパラメータが存在するためです。
私はそうだと思います。これはおそらく、HTTP POSTメソッドを使用してデータを送信したためです。または、GETを通じてデータを提出していますか?もしそうなら、それは奇妙な行動になります。
URLのパラメータについて:私は答えはありませんが、この動作は私には驚きではありません。例えば、doGet()
とdoPost()
のメソッドを持つサーブレットを作成するとします。私が何らかのアクションを実行すると思われる投稿を介してURLにデータを送信すると、doPost()
メソッドの応答は送信されたURLとの相対的なものになるため、結果のページのURLは同じになります。ここでも同じロジックに従うことができます。アクションフェーズに提出した場合は、提出されたURLが結果として返されます。
対処方法答えはPOST-REDIRECT-GETパターンです。 processAction()
メソッドからブラウザにHTTP 302という応答を送信し、通常はブラウザを元のページにリダイレクトする必要があります。
これは簡単です。フォームページのJSPは、フォームの入力に現在のURLを保存する必要があります。
<%
String redirect = PortalUtil.getCurrentURL(renderRequest);
%>
<input type="hidden" name="<portlet:namespace />redirect" value="<%= redirect %>">
次にあなたがprocessAction()
にこのURLにリダイレクトします。 あなたはLiferayのMVCPortletを使用して、あなただけのすべての操作の後sendRedirect()
メソッドを呼び出す必要がある場合:
public void processAction(ActionRequest req, ActionResponse resp) {
// Doing stuff
sendRedirect(req, resp);
}
を元のURLの値が"redirect"
と呼ばれるリクエストパラメータである場合、このメソッドは魔法のようにリダイレクトしますあなたは元のページに戻ります。
あなただけの要求からURLを取得し、方法ActionResponse.sendRedirect()
を使用し、LiferayのMVC代わりGenericPortlet
の単なるサブクラスを使用していないある場合:
public void processAction(ActionRequest req, ActionResponse resp) {
// Doing stuff
String redirect = (String)actionRequest.getAttribute("redirect");
resp.sendRedirect(redirect);
}
使用しているフレームワーク? Liferay MVCPortletクラスを使用していますか? – brandizzi
はい、私はcom.liferay.util.bridges.mvc.MVCPortletを使用しています。 –