- - PR -
JSFのdatatableで特定の行だけ色を変える
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-01-14 19:33
datatableで特定の行の背景、文字の色を変更したいのですが、ご教授ください。
| ||||
|
投稿日時: 2005-01-14 23:14
単にCSS使えばいいだけだと思います。
ID属性とかCLASS属性を利用してCSSでそうできるような htmlをはき出せるように書くだけです。 | ||||
|
投稿日時: 2005-01-19 14:14
標準セットではできそうもありませんね.
特定行のスタイル(背景色や文字色)をプログラムで与えてよいのであれば,カスタムレンダラを作ればできそうです. もともとrowStylesという,行ごとにスタイルを周期的に変更する機能があって,これを実装しているのはcom.sun.faces.renderkit.html_basic.TableRenderer.encodeChildrenというメソッドなので,TableRendererのサブクラスを作ってこのメソッドをオーバーライドすればいいと思います. 背景色や文字色をタグで指定できるようにするには,さらにカスタムタグを定義すれば良く,これはそんなに難しくないと思います. | ||||
|
投稿日時: 2005-01-20 19:21
標準セットではできそうもない,と言いましたが,こんなんで良ければ:
<h:dataTable value="#{example.lines}" var="line"> <h:column> <h:inputText value="#{line.text}" style="#{line.style}"/> </h:column> </h:dataTable> ここでLine.java: public String getStyle() { if (text != null && text.length() > 5) { return "color: red"; } else { return ""; } } こうすると,6文字以上入力した行は赤くなりましたけど. 本格的にやろうとすると,アプリケーション側のコーディングがJSP/HTMLをかなり意識したやっかいなコーディングになりそうだし,JSPページ側でスタイルを指定できないので,あんまり好ましいとは思いませんが. | ||||
|
投稿日時: 2005-01-20 20:16
こんな感じでいけませんか?
| ||||
|
投稿日時: 2005-01-21 19:23
<h:column>
<c:if test="${line.text == 'USA'}"> <div id="fuga">....</div> </c:if> </h:column> のような感じにできないか?ということですか? <h:column>と</h:column>の間には<c:if>どころか,プレインテキストすら入れられません. 繰り返し処理がJSFのコンポーネントしか扱えないからです. | ||||
|
投稿日時: 2005-01-24 10:14
しつこいですが,再度!
「JSPページ側でスタイルを指定できない」と言いましたが,こんな書き方もできますね. まずLine.java: public String getType() { if (text != null && text.length() > 5) { return "long"; } else { return "short"; } } と用意しておきます.そして <h:dataTable value="#{example.lines}" var="line"> <h:column> <h:inputText value="#{line.text}" style="#{line.type == 'long'?'color:red':''}"/> </h:column> </h:dataTable> ?:構文がちょっとトリッキーです.これを避ける方法も考えました. faces-config.xmlで <managed-bean> <managed-bean-name>styleMap</managed-bean-name> <managed-bean-class>java.util.HashMap</managed-bean-class> <map-entries> <map-entry> <key>long</key><value>color:red</value> </map-entry> <map-entry> <key>short</key><value></value> </map-entry> </map-entries> <managed-bean-scope>session</managed-bean-scope> </managed-bean> のように用意しておけば <h:dataTable value="#{example.lines}" var="line"> <h:column> <h:inputText value="#{line.text}" style="#{styleMap[line.type]}"/> </h:column> </h:dataTable> と書けます.faces-config.xmlはJSPページ側の資産であるという前提ですが. | ||||
|
投稿日時: 2005-02-01 16:09
aaさん、よしだひろゆきさん、ありがとうございました。
cssと、datatableのrowclassesにBeanのカラムを指定し、実現することができました。 |