request.setAttribute
JSP ページで使用してから、HTML サブミットで同じ request 属性を取得することは可能Servlet
ですか?
7 に答える
残念ながら、Request オブジェクトはページの読み込みが完了するまでしか利用できません。読み込みが完了すると、どこかに保存されていない限り、すべての値が失われます。
リクエストを通じて属性を保持したい場合は、次のいずれかを行う必要があります。
- などの非表示の入力をフォームに入れます
<input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" />
。これは、リクエスト パラメータとしてサーブレットで使用できるようになります。 - それをセッションに入れます(
request.getSession()
JSPでは、これは単に利用可能ですsession
)
管理が簡単なため、セッションを使用することをお勧めします。
ただし、pageContext 属性を使用してそれを行うことができます。
JSP で:
<form action="Enter.do">
<button type="SUBMIT" id="btnSubmit" name="btnSubmit">SUBMIT</button>
</form>
<% String s="opportunity";
pageContext.setAttribute("opp", s, PageContext.APPLICATION_SCOPE); %>
サーブレット (「Enter.do」URL パターンにリンク):
String s=(String) request.getServletContext().getAttribute("opp");
APPLICATION_SCOPE 以外にも、SESSION_SCOPE などのスコープがあります。APPLICATION_SCOPE は、ServletContext 属性に使用されます。
リクエストを持続させたい場合は、これを試してください:
例: JSP またはサーブレット ページ
request.getSession().setAttribute("SUBFAMILY", subFam);
受信ページでは、以下の行を使用してセッションとデータを取得します。
SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY");
Phil Sacre の回答は正しかったのですが、セッションはただの目的で使用されるべきではありません。これは、ユーザー ログインなど、セッションの存続期間中存続する必要がある値にのみ使用してください。特にコレクションを扱うときや、ユーザーが以前にアクセスしたページに戻って、前回のアクセスからまだ値が残っていることに気付いたときに、セッションを過度に使用してより多くの問題に遭遇することがよくあります。賢いプログラムは変数のスコープを可能な限り最小化しますが、悪いプログラムはセッションを使いすぎます。
試す
request.getSession().setAttribute("SUBFAMILY", subFam);
request.getSession().getAttribute("SUBFAMILY");
間違っている場合は訂正してください...リクエストは連続するページ間で持続すると思います。
1ページ->2ページ->3ページからトラバースすると思います。
1ページ目からsetAttributeを使用してリクエストオブジェクトに値を設定し、2ページ目でgetAttributeを使用して取得します。次に、同じリクエストオブジェクトに何かを設定して3ページ目で取得しようとすると、null値が返されます。 JSPを作成したリクエストと、JSPが送信されたときに生成されるリクエストは完全に異なるリクエストであり、最初のリクエストに配置された属性は2番目のリクエストでは使用できません。
私は2ページのこのようなものが失敗することを意味します:
1ページ目の場合も同じことが機能しますが、次のようになります。
したがって、フィルが提案した2つのオプションのいずれかを続行する必要があると思います。
私はフィルが正しいと思います 要求オプションはページが読み込まれるまで利用可能です. したがって、別のページに値を送信したい場合は、非表示のタグに設定するか、別のページでのみ値が必要でそれ以上の値が必要ない場合はセッションのサイドに設定します。その値が必要な場合は、非表示のタグが最適なオプションですその時点で複数のページでは、セッションは非表示のタグよりも優れたオプションです。