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

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

ただいまの
回答率

90.49%

  • Java

    14057questions

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

  • JSP

    943questions

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

  • サーブレット

    118questions

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

  • GET

    91questions

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

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

受付中

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 2,945

Sfidante

score 90

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

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

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

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

まずは、サーブレットです。
case "selectSendOffer":
                        messdao.connect();
                        offerdao.connect();
                        pairdao.connect();
                        List<OfferBeans>listSend = offerdao.selectOfferSend(myPairID);
                        for(OfferBeans bean : listSend){
                            String pair_recID = bean.getOfferRecieveId();
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                            Date date = sdf.parse(offerdao.selectTime(myPairID, pair_recID).getTime().toString());
                            long baseTime = date.getTime() + 259200000;
                            Timestamp timeStamp = new Timestamp(System.currentTimeMillis());
                            long timeNow = timeStamp.getDateTime();
                            long timeMilliSec = (baseTime - timeNow);
                            if(timeMilliSec < 0){
                                offerdao.deleteOfferSend(myPairID, pair_recID);
                            }
                            request.setAttribute("offerSend", offerdao.selectOfferSend(myPairID));
                            int treat = bean.getTreat();
                            if(treat == 0){
                                request.setAttribute("treat", "");
                            }else if(treat == 1){
                                request.setAttribute("treat", "label-treat");
                            }else if(treat == 2){
                                request.setAttribute("treat", "label-treated");
                            }
                        }
                        request.setAttribute("countPair", messdao.selectCountPair());
                        messdao.close();
                        offerdao.close();
                        request.getRequestDispatcher("yaritori_send.jsp").forward(request, response);
                        break;
「treat」という属性名を持ち、それをJSPへディスパッチをしてJSPで表示します。
<c:forEach var="offer_send" items="${ requestScope.offerSend }">
    <ul class="box-pairlist">
        <li>
            <a href="PairInfo?switch=pairDetailOfferSend&yourpairid=${ offer_send.pairId }">
            <div>
            <span class="<c:out value='${ treat }'/>"></span>
                <div class="photo">
                    <div><!-- photo -->
                        <img class="lazy" 
                            data-original="${ offer_send.photo1 }/picture?width=120&height=120" 
                            width="120" 
                            height="120" 
                            alt="" />
                        <span class="new"></span>
                    </div>
                       <div><!-- photo -->
                           <img class="lazy" 
                               data-original="${ offer_send.photo2 }/picture?width=120&height=120" 
                               width="120" 
                               height="120" 
                               alt="" />
                        <span class="new"></span>
                    </div>
                </div>
                <div class="info">
                    <ul class="profile">
                        <li>
                            <span class="name">${ offer_send.name1 }(${ offer_send.age1 })</span>
                            <span class="job">${ offer_send.employment1 }</span>
                            <span>${ offer_send.school1 }</span>
                        </li>
                        <li>
                           <span class="name">${ offer_send.name2 }(${ offer_send.age2 })</span>
                            <span class="job">${ offer_send.employment2 }</span>
                            <span>${ offer_send.school2 }</span>
                       </li>
                        <li class="shop">${ offer_send.comment }</li>
                    </ul>
                    </div>
                </div>
            </a>
        </li>
    </ul>
    </c:forEach>

だいぶ長くなってしまいましたが、ご教授の程よろしく御願い致します。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

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


(追記)

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

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

List<OfferBeans> listSend = ... ;
List<OutputBean> beans = new ArrayList<>();
for (OfferBeans bean : listSend) {
    OutputBean obean = new OutputBean(); // 出力用Bean
    String pair_recID = bean.getOfferRecieveId();
    // 省略
    obean.setOfferSend(offerdao.selectOfferSend(myPairID));
    obean.setTreat("");
    beans.add(obean);
}
request.setAttribute("offerSend", beans);

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/25 19:25

    ご返信ありがとうございます。
    おっしゃられる通り、
    上書きされてしまっていますね。
    そうならない為に、
    for文の外に出したり、
    for文の中でも上書きされないようにと
    試行錯誤致しましたが、
    どうもうまくいきません。

    大変不躾ながら、
    解決の糸口をご教授願えないでしょうか?

    キャンセル

  • 2015/05/26 08:22

    解答欄に追記しました。

    キャンセル

関連した質問

同じタグがついた質問を見る

  • Java

    14057questions

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

  • JSP

    943questions

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

  • サーブレット

    118questions

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

  • GET

    91questions

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

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