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

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

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

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Q&A

1回答

7017閲覧

サーブレットのsetAttributeでJSPによって表示させる処理をしているのですが、うまく表示されず原因がよくわかりません。

Sfidante

総合スコア90

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

0グッド

1クリップ

投稿2015/05/25 08:31

こんにちは、プログラミング初心者でWebアプリケーションを作成しています。
サーブレットとJSPの連携の部分でうまくいかず、
原因不明なため、こちらで質問をさせて頂きます。

おこないたいことは、
サーブレット上でDAOからSELECTしてデータベースからデータを取得してきます。
そして、その値を分岐処理して、
その分岐次第でsetAttributeにより異なる属性を設定し、
JSPでそれぞれ違った表示を行います。

現状といたしましては、
データベースから期待する値は取れてきているのかなと感じます。(sysoutで確認しました。)
そして分岐処理もうまくいっています。
最後のsetAttributeで設定した値通りの表示をJSPでしてくれないです。
尚、エラーは出力しておりません。

下記にサーブレットとJSPの関係のある箇所を記載致しますので、
御解答の程よろしく御願い致します。

まずは、サーブレットです。

lang

1case "selectSendOffer": 2 messdao.connect(); 3 offerdao.connect(); 4 pairdao.connect(); 5 List<OfferBeans>listSend = offerdao.selectOfferSend(myPairID); 6 for(OfferBeans bean : listSend){ 7 String pair_recID = bean.getOfferRecieveId(); 8 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 9 Date date = sdf.parse(offerdao.selectTime(myPairID, pair_recID).getTime().toString()); 10 long baseTime = date.getTime() + 259200000; 11 Timestamp timeStamp = new Timestamp(System.currentTimeMillis()); 12 long timeNow = timeStamp.getDateTime(); 13 long timeMilliSec = (baseTime - timeNow); 14 if(timeMilliSec < 0){ 15 offerdao.deleteOfferSend(myPairID, pair_recID); 16 } 17 request.setAttribute("offerSend", offerdao.selectOfferSend(myPairID)); 18 int treat = bean.getTreat(); 19 if(treat == 0){ 20 request.setAttribute("treat", ""); 21 }else if(treat == 1){ 22 request.setAttribute("treat", "label-treat"); 23 }else if(treat == 2){ 24 request.setAttribute("treat", "label-treated"); 25 } 26 } 27 request.setAttribute("countPair", messdao.selectCountPair()); 28 messdao.close(); 29 offerdao.close(); 30 request.getRequestDispatcher("yaritori_send.jsp").forward(request, response); 31 break;

「treat」という属性名を持ち、それをJSPへディスパッチをしてJSPで表示します。

lang

1<c:forEach var="offer_send" items="${ requestScope.offerSend }"> 2 <ul class="box-pairlist"> 3 <li> 4 <a href="PairInfo?switch=pairDetailOfferSend&yourpairid=${ offer_send.pairId }"> 5 <div> 6 <span class="<c:out value='${ treat }'/>"></span> 7 <div class="photo"> 8 <div><!-- photo --> 9 <img class="lazy" 10 data-original="${ offer_send.photo1 }/picture?width=120&height=120" 11 width="120" 12 height="120" 13 alt="" /> 14 <span class="new"></span> 15 </div> 16 <div><!-- photo --> 17 <img class="lazy" 18 data-original="${ offer_send.photo2 }/picture?width=120&height=120" 19 width="120" 20 height="120" 21 alt="" /> 22 <span class="new"></span> 23 </div> 24 </div> 25 <div class="info"> 26 <ul class="profile"> 27 <li> 28 <span class="name">${ offer_send.name1 }(${ offer_send.age1 })</span> 29 <span class="job">${ offer_send.employment1 }</span> 30 <span>${ offer_send.school1 }</span> 31 </li> 32 <li> 33 <span class="name">${ offer_send.name2 }(${ offer_send.age2 })</span> 34 <span class="job">${ offer_send.employment2 }</span> 35 <span>${ offer_send.school2 }</span> 36 </li> 37 <li class="shop">${ offer_send.comment }</li> 38 </ul> 39 </div> 40 </div> 41 </a> 42 </li> 43 </ul> 44 </c:forEach>

だいぶ長くなってしまいましたが、ご教授の程よろしく御願い致します。

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

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

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

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

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

guest

回答1

0

treatの値もofferSendと同様にrequest.setAttributeで設定しているので、requestScope.treatで取得できると思います。
ただ、これだとループの中のrequest.setAttribute("treat")は毎回上書きされていますから、期待している動作ではないですよね?


(追記)

出力用のBeanを作って、それをofferSendに設定しましょう。

細かい作りが分からないので大雑把にしか書けませんが、サーブレット側はこんな感じです。

lang

1List<OfferBeans> listSend = ... ; 2List<OutputBean> beans = new ArrayList<>(); 3for (OfferBeans bean : listSend) { 4 OutputBean obean = new OutputBean(); // 出力用Bean 5 String pair_recID = bean.getOfferRecieveId(); 6 // 省略 7 obean.setOfferSend(offerdao.selectOfferSend(myPairID)); 8 obean.setTreat(""); 9 beans.add(obean); 10} 11request.setAttribute("offerSend", beans);

投稿2015/05/25 08:42

編集2015/05/25 13:34
argius

総合スコア9388

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

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

Sfidante

2015/05/25 10:25

ご返信ありがとうございます。 おっしゃられる通り、 上書きされてしまっていますね。 そうならない為に、 for文の外に出したり、 for文の中でも上書きされないようにと 試行錯誤致しましたが、 どうもうまくいきません。 大変不躾ながら、 解決の糸口をご教授願えないでしょうか?
argius

2015/05/25 23:22

解答欄に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問