質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Q&A

解決済

1回答

11076閲覧

JSPのHTMLタグの中でif文を書きたい

Chandler_Bing

総合スコア673

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

0グッド

0クリップ

投稿2019/03/08 13:47

編集2019/03/09 10:22

jsp

1<!--一部抜粋です--> 2 <div class="basicbox sex"> 3 男性:<input type="radio" name="sex" value="男性" <c:if test="${sex == "男性"}">> 4 女性:<input type="radio" name="sex" value="女性" <%= if(${sex} == "女性"){System.out.println("chaecked")}%>> 5 <div class="erroemsg"> 6 <c:if test="${not empty sexError}"> 7 <p>${sexError}</p> 8 </c:if> 9 </div> 10 </div> 11

このインプットの中に書かれているif文は両方ともエラーになります。このようなinputやoptionタグの中で条件分岐するにはどのように書けば良いのですか。

★現状
抜粋のsexについてはサーブレットで以下のようにセッションに格納しています。

Java

1session.setAttribute("sex", sex);

★EL式、JSP式の私の認識
スクリプトレット(HTMLが始まる前)にJavaのコードを記述する場合は <% Javaのコード %>
HTML内にJavaのコードを埋め込む場合は <%= 変数や演算式 %>
EL式を使用すると、インポートやセッションを記述することなくセッションの値を使用できる。つまり${}が使用できる
EL式で条件分岐等を行う為にJSTLを使用する。

が私の認識です。

★質問
以上を踏まえていくつか質問があります。

❶スクリプトレット内でEL式でセッションの値をなぜ変数に格納できないのでしょうか。

JSP

1//スクリプトレット内の式 2<% 3 4String sex = ${sex}; 5 6%>

のようにするとラダーマークにトークンエラーがつきます


以下のinputの文のでセッション変数sexが’男性’であればcheckedをつけるにどう書けば良いでしょうか。

JSP

1<input type="radio" name="sex" value="男性">

ヒントだけでもお願いします。

【関連質問】

<select name="year"> <c:forEach begin="1900" end="2010" var="i" step="1"> <option value="${i}" ${year == ${i} ? "selected" : ""}> <c:out value="${i}" /> </option> </c:forEach> </select>

というJSP文があります。セッションに以下のように保存しています。

session.setAttribute("year",year);//yearにはString型で西暦が入っている。

私のコードはエラーになってますが、2つ追記で質問があります。

<c:out value="${i}" />の${i}はセッションと同じ扱いなのでしょうか。

${year == ${i} ? "selected" : ""}だとなぜエラーになりますか。
手元の参考書には、${year == 値 ? "true" : "false"}の三項演算子の解説がなく、JSPでの使い方がわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

スクリプトレットの中はJavaのコードを記載します。
EL式はJavaのコードではなくJSP用に用意された特殊なコードなので、スクリプトレットの中にEL式は記載できません。

EL式を使う場合には、EL式とJSTLで統一した方がコードが見やすいでしょう。

投稿2019/03/08 14:40

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chandler_Bing

2019/03/08 15:44

回答ありがとうございます。答えをお聞きしますが、この場合はどう書けば良いでしょうか。
A-pZ

2019/03/09 00:53

サーブレット側で request.setAttribute("sex", "male"); としていた場合、JSPでは、<input type="radio" name="sex" value="male" <c:if test="${sex == 'male'}">checked=checked</c:if>> でしょう。ラジオボタンに並べる項目が多い場合は、<c:set>などで値をあらかじめ作っておくほうが良いでしょう。
Chandler_Bing

2019/03/09 10:13

あれから色々調べた結果、まだはっきりしませんが、 <input type="radio" name="sex" value="男性" ${sex == "男性" ? "checked" : ""}> これでもいけるようです。
Chandler_Bing

2019/03/09 10:15

また加えて、関連質問がありますので追記いたします。 いつも回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問