送信ボタンをクリックして同じページにリダイレクトしたときに、ddl の同じ項目を選択するにはどうすればよいですか?
2 に答える
all
をクリックしたときに、DDL1 およびM
DDL2 の をリクエスト パラメータとしてサーバーに送信している必要がありますsearch。
検索でサーブレットに移動して検索結果を取得したり、DDL を含む JSP にリダイレクトまたは転送する前よりも何らかの種類のビジネス ロジックを実行したりする場合は、リクエスト属性としてall
&M
リクエスト パラメータを追加し、JSP でそれらをチェックします。値に対して属性を要求し<option>
ます。
コードは次のようになります。
JSP コード スニペット
<select name="ddl1">
<option value="0">all</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<select name="ddl2">
<option value="0">All</option>
<option value="L">L</option>
<option value="M">M</option>
<option value="N">N</option>
<option value="O">O</option>
</select>
サーブレット コード スニペット
String ddl1Param = request.getParameter("ddl1");
String ddl2Param = request.getParameter("ddl2");
// your business logic
// ...
request.setAttribute("ddl1Attr", ddl1Param);
request.setAttribute("ddl2Attr", ddl2Param);
// your forward or redirect logic goes here
// ...
変更された JSP コードは次のようになります。
各オプション ブロックに条件を含めて、<c:if>
返された属性がオプション値と等しいかどうかを確認しました。そうであれば、そのselected
属性がオプションに配置されます。
JSP 式言語 (EL)を使用しています。
<select name="ddl1">
<option value="0" <c:if test="${'0' eq ddl1Attr}">selected</c:if>>all</option>
<option value="A" <c:if test="${'A' eq ddl1Attr}">selected</c:if>>A</option>
<option value="B" <c:if test="${'B' eq ddl1Attr}">selected</c:if>>B</option>
<option value="C" <c:if test="${'C' eq ddl1Attr}">selected</c:if>>C</option>
<option value="D" <c:if test="${'D' eq ddl1Attr}">selected</c:if>>D</option>
</select>
<select name="ddl2">
<option value="0" <c:if test="${'0' eq ddl2Attr}">selected</c:if>>all</option>
<option value="L" <c:if test="${'L' eq ddl2Attr}">selected</c:if>>L</option>
<option value="M" <c:if test="${'M' eq ddl2Attr}">selected</c:if>>M</option>
<option value="N" <c:if test="${'N' eq ddl2Attr}">selected</c:if>>N</option>
<option value="O" <c:if test="${'O' eq ddl2Attr}">selected</c:if>>O</option>
</select>
別のアプローチ
検索のクリック時にリクエストを同じ JSP に転送するだけの場合 (つまり、その間にサーブレットがない場合)、JSP コードを次のように変更できます。
param.ddl1
どちらでも使用できますparam["ddl1"]
が、同じことです。この EL は、リクエスト パラメータddl1
とddl2
.
<select name="ddl1">
<option value="0" <c:if test="${'0' eq param.ddl1}">selected</c:if>>all</option>
<option value="A" <c:if test="${'A' eq param.ddl1}">selected</c:if>>A</option>
<option value="B" <c:if test="${'B' eq param.ddl1}">selected</c:if>>B</option>
<option value="C" <c:if test="${'C' eq param.ddl1}">selected</c:if>>C</option>
<option value="D" <c:if test="${'D' eq param.ddl1}">selected</c:if>>D</option>
</select>
<select name="ddl2">
<option value="0" <c:if test="${'0' eq param['ddl2']}">selected</c:if>>all</option>
<option value="L" <c:if test="${'L' eq param['ddl2']}">selected</c:if>>L</option>
<option value="M" <c:if test="${'M' eq param['ddl2']}">selected</c:if>>M</option>
<option value="N" <c:if test="${'N' eq param['ddl2']}">selected</c:if>>N</option>
<option value="O" <c:if test="${'O' eq param['ddl2']}">selected</c:if>>O</option>
</select>
別の方法は、値を に格納することですsession
。しかし、私は固執するrequest
方が良いと思います。
ページにリダイレクトされるため、フォームから送信されたデータを保存できません。私が考えることができるオプションは、セッションに保存して渡すことです。
この SO の質問は、セッションでデータを設定する方法に役立ちます