🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSP

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

8243閲覧

特定の条件下において<table>内のセルの背景色を変更したい

K_3578

総合スコア1282

JSP

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/01/29 08:56

編集2021/02/01 08:31

前提・実現したいこと

いつもお世話になっております。

日毎の車両の仕事を登録して管理するWebアプリケーションを作っています。
任意登録の箇所であったり、まだその日の仕事が未登録の場合セルの背景色を変えることで視覚的に登録されてないことを示す機能を実装
したくて、コードを書いてみたのですが、色を変えることが出来ていません。
何かアドバイスを頂きたいです・・・。

該当のソースコード

JSP

1<table class="Truck_table"> 2 <thead> 3 <tr> 4 <th class="space1" rowspan="2" colspan="4"></th> 5<c:forEach begin="1" end="31" varStatus="stts"> 6 <th class="date" colspan="4">1月<c:out value="${stts.count}"></c:out>日</th></c:forEach> 7 </tr> 8 <tr> 9 <c:forEach begin="1" end="31"> 10 <th class="task_type">宵積卸地</th> 11 <th class="task_type">積地</th> 12 <th class="task_type">卸地</th> 13 <th class="task_type">宵積</th> 14 </c:forEach> 15 </tr> 16 </thead> 17 18 <c:forEach var="truck" items="${trucks}" varStatus="status"> 19 <tbody> 20 <tr> 21 <td class="office_name" rowspan="4"><c:out value="${truck.office_name}"></c:out></td> 22 <td class ="truck_code" colspan="2" rowspan="4"><c:out value="${truck.truck_code}"></c:out></td> 23 <td class ="truck_type" rowspan="4"><c:out value="${truck.truck_type}"></c:out></td> 24 25 <td class ="time"><c:out value="${truck.mw_time}"></c:out></td> 26 <td class ="time"><c:out value="${truck.sa_time}"></c:out></td> 27 <td class ="time"><c:out value="${truck.wa_time}"></c:out></td> 28 <td class ="time"><c:out value="${truck.es_time}"></c:out></td> 29 </tr> 30 31 <tr><!--試験的にこの行のみに変更するコードを書いています。--> 32 <c:if test="${!empty truck.m_wholesale_area}" var="flg"/><!--formから内容が入力されて表示されているかを判断--> 33 <c:if test="${flg}" ><!--何かしら内容が入力されていた場合--> 34 <td class ="area" id="1"><c:out value="${truck.m_wholesale_area}"></c:out></td></c:if> 35 <c:if test="${!flg}" ><!--内容がnull、若しくは空文字になっている場合--> 36 <td class ="area" id="2"><c:out value="${truck.m_wholesale_area}"></c:out></td></c:if> 37 <c:if test="${!empty truck.stack_area}" var="flg"/> 38 <c:if test="${flg}" > 39 <td class ="area" id="1"><c:out value="${truck.stack_area}"></c:out></td></c:if> 40 <c:if test="${!flg}" > 41 <td class ="area" id="2"><c:out value="${truck.stack_area}"></c:out></td></c:if> 42 <c:if test="${!empty truck.wholesale_area}" var="flg"/> 43 <c:if test="${flg}" > 44 <td class ="area" id="1"><c:out value="${truck.wholesale_area}"></c:out></td></c:if> 45 <c:if test="${!flg}" > 46 <td class ="area" id="2"><c:out value="${truck.wholesale_area}"></c:out></td></c:if> 47 <c:if test="${!empty truck.e_stack_area}" var="flg"/> 48 <c:if test="${flg}" > 49 <td class ="area" id="1"><c:out value="${truck.e_stack_area}"></c:out></td></c:if> 50 <c:if test="${!flg}" > 51 <td class ="area" id="2"><c:out value="${truck.e_stack_area}"></c:out></td></c:if> 52 </tr> 53 54 <tr> 55 <td class ="time"></td> 56 <td class ="time"><c:out value="${truck.sa_time2}"></c:out></td> 57 <td class ="time"><c:out value="${truck.wa_time2}"></c:out></td> 58 <td class ="time"></td> 59 </tr> 60 <tr> 61 <td class ="area" id="3"></td> 62 <td class ="area" id="3"><c:out value="${truck.stack_area2}"></c:out></td> 63 <td class ="area" id="3"><c:out value="${truck.wholesale_area2}"></c:out></td> 64 <td class ="area" id="3"> <p><a href="<c:url value='/dispatch/show?id=${truck.id}' />">登録情報変更</a></p></td> 65 </tr> 66 </tbody> 67 </c:forEach> 68 69 </table>

css

1table.Truck_table td.area #1{ /*内容が入っていた場合。*/ 2 background:#fff; 3} 4table.Truck_table td.area #2{ /*内容が入っていなかった場合。*/ 5 background:#ffdead; 6}

試したこと

上記コードの通り、<c:if>タグで条件分岐させれば実装できるかと思い書いてみました。
スタイルシートやjspは部分的に切り取って貼り付けていますので必要な情報が抜けているかもしれませんので
ご指摘頂けると幸いです。

補足情報(FW/ツールのバージョンなど)

Eclipse4.6Neon使用、 Tomcat8

追記

問題解決以前の問題が多いため、一度クローズにしておきます。
自己解決した場合回答欄に追記しようと思います。
----------------
自己解決しました。
解決方法に関しましては自分のためにも別途記載しておきました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

モック作って確認してからにしないとどうにもならないと思います。
※全部見てるわけじゃないですがこの指摘は一度や二度じゃないはず

「そんなことしなくても動的な出力に対してどうなるか頭で完全に把握できるぜ」という自信があるならいいんですけど(私は自信があってもいきなりプログラム書きませんが)

  • idは1ページ内に重複してはいけません。一意であることが求められます。

 なので、table.Truck_table td.areaとか前に書く必要なし。一意だから。

※というか余程特別な理由がない限り採用すべきではない

投稿2021/01/29 09:44

編集2021/01/29 21:37
m.ts10806

総合スコア80875

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

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

K_3578

2021/02/01 00:59

お世話になっております。 モックについては何度かご指摘頂いた際に中途半端な理解をして理解した物としていましたので、 一度モック自体を組まないといけないんですね。感謝致します。 id属性に関しましてはclass属性との違いを良く理解せずに使ってしまったのですが、 色々制約があるのですね。 どうやら解決以前の問題が多くあるようなので一度、出直させて頂きます。 回答ありがとうございました。
m.ts10806

2021/02/01 01:27

制約というか「書いた通りに動いている」だけです。仕様通り。 仕様を把握できてない状態で思う通りに動くようにはできないし、もともと設計も何もしてない状態でやりたいことができるわけがないということです。 モックも「完成予定図」として設計段階でやること。
K_3578

2021/02/01 07:39 編集

コメントありがとうございます。 まだまだ基礎の勉強、それに開発する上での常識が足りてないようですので精進致します。 お時間を割いて頂きありがとうございました。 -------------------------------- 追記:質問の内容については自己解決しました。 改めて回答ありがとうございました。
guest

0

モック改めて作成。
イメージ説明

<tr> <c:if test="${!empty truck.m_wholesale_area}" var="flg"/> <c:if test="${flg}" > <td class ="area" bgcolor="ffffff"><c:out value="${truck.m_wholesale_area}"></c:out></td></c:if> <c:if test="${!flg}" > <td class ="area" bgcolor="ffdead"><c:out value="${truck.m_wholesale_area}"></c:out></td></c:if>

先に**<c:if><td>セル内not_empty**となる場合の条件分岐文を書き、
not_emptyの結果をvar属性にflgと言う変数に格納する。(1行目)
その後は再び<c:if>を使用し、flgがtrueとなる場合、falseとなる場合それぞれ<td>タグ内に
bgcolor属性を追加し、直接jsp内で背景色を指定する文を書く。
後は必要なセルの分同じ処理をvalueや最初の<c:if test>内を書き換えて書けばOK。

投稿2021/02/01 05:25

編集2021/02/01 06:51
K_3578

総合スコア1282

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

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

K_3578

2021/02/01 06:54

思ったこと このjsp内にbgcolor属性で直接背景色を指定するのは望ましい処理なのか否か。 自分でやってみたところやり方が分からず出来なかったが、スタイルシート内で 同じ事をする指示を書けるのか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問