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

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

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

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

Q&A

2回答

28984閲覧

jspのプルダウンメニューの初期値に変数を使用するには

manmos

総合スコア55

JSP

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

0グッド

0クリップ

投稿2016/05/11 15:22

現在データベースのレコードを更新するコードを作成中なんですが、更新用の入力フォームに初期値を設定するところで躓いてしまっています。
テキストボックスの初期値にDaoとサーブレットで用意した変数を当てはめるのは簡単だったのですがプルダウンメニューの場合どのようにすればよいのかわかりません。

氏名<input type="text" name="name" size="20" maxlength="20" value="${userinfo.name}" ><br> 氏名(ひらがな)<input type="text" name="nameHiragana" size="20" maxlength="20" value="${userinfo.nameHiragana}"><br> 所属ID<select name="InfoId"> <%while (rs1.next()) { %> <option value="<%=rs1.getString("company_id")%>"><%=rs1.getString("abbreviation")%></option> <% if (◯◯ == rs1.getString("company_id")) { %> <option selected value="<%=rs1.getString("company_id")%>"><%=rs1.getString("abbreviation")%></option> <% } %> <%}%> </select><br>

if文でプルダウンのcompany_idとテキストボックスの値と同じように持ってきている${userinfo.companyId}が同じ場合にselectedを付与して初期値にしようとしているのですがうまくいかないです。
上記の◯◯の部分に${userinfo.companyId}と入れようとするとエラーになってしまうのですがこの場合どのように書いたらいいでしょうか?

詳しい方いらっしゃいましたらご教授お願いします。

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

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

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

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

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

guest

回答2

0

${userinfo.companyId}はEL式ですので、リクエスト属性やセッション属性をたどって指定した名前に合致するオブジェクトを取得して表示します。

対してスクリプトレットは自動的にリクエスト属性などから値を取得することはしませんので、暗黙オブジェクトから指定した値を参照しなければなりません。
そのため、if文の前には次の記述が必要です。

JSP

1<% 2 // Userinfoをリクエスト属性から取得し、companyIdを取り出す 3 Userinfo userinfo = (Userinfo)request.getAttribute("userinfo"); 4 String companyId = userinfo.getCompanyId(); 5 if (companyId.equals(rs1.getString("company_id"))) { 6%>

しかしこれだとスクリプトレット<% .... %>の部分が非常に長くなってしまって、JSPの可読性が悪くなりますので、if文で比較するところよりも少し上の行にてcompanyIdを取得する処理を記載しておくと良いでしょう。

投稿2016/05/16 07:35

A-pZ

総合スコア12011

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

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

0

ソースから見るに、${userinfo.companyId}はJavascriptですね。
その値を設定している箇所はどうなっているでしょうか?

おそらく、サーバーからのデータを userinfo.companyId に設定している箇所があると思うので、
そこの部分の値を持ってくればいいかと思います。

画面の描画順が、JSP(<% ~ %>で囲われている部分) → HTML・Javascript と覚えておくと頭の整理が付くと思いますよ。

あと、気になる箇所が2点。

① JSPの部分はJavaになるので、文字列の内容比較は equals() を使用してください。
==ではインスタンスが同じかどうかの比較になってしまいます。

② 上のソースですと、selected されている場合、同じオプションが2つ作成されてしまうので、

JSP

1<% while (rs1.next()) { %> 2 <option value="<%=rs1.getString("company_id")%>" <% if (◯◯.equals(rs1.getString("company_id"))) { %>selected<% } %>><%=rs1.getString("abbreviation")% ></option> 3<% } %> </select><br>

と selected の部分だけを if で囲ってあげたらいいと思います。

投稿2016/05/12 00:37

編集2016/05/12 00:48
kaputaros

総合スコア1844

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

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

manmos

2016/05/14 16:22

間が空いてしまい申し訳ありません。 >おそらく、サーバーからのデータを userinfo.companyId に設定している箇所があると思うので、 >そこの部分の値を持ってくればいいかと思います。 これは${userinfo.companyId}とは違うのでしょうか? サーバからのデータはまずDaoで detailinfo.setCompanyId(rs.getString("company_id")); と値を取得し、次にservletで userinfo.setCompanyId(detailinfo.getCompanyId()); request.setAttribute("userinfo", userinfo); とuserinfoに格納しています。 どうすれば上記のように格納しないで、値をjspに持ってこれるのでしょうか? 何卒よろしくお願いします
kaputaros

2016/05/16 05:11 編集

すいません、自分の知識が古かったようです。 JSP2.0から ${ 式 } (EL式)が使えるようになっていたんですね。 おそらく、「userinfo.companyId」だけでのアクセスは EL式 での書き方であって、 <% ~ %>内での書き方ではないのでエラーになってしまうのではないでしょうか。 userinfo.getCompanyId() など、userinfo内のゲッターメソッドを呼び出してあげる必要があるんだと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問