これは標準では不可能であり<p:selectManyCheckbox>
、少なくともこの種のダイナミクスでは不可能です。静的な値の場合は、CSS3nth-child()
セレクターを使用できます。に動的な値を使用すると<p:selectManyCheckbox>
、基本的にレンダラーをオーバーライドするか (これは簡単な作業ではありません)、機能リクエストを投稿する必要があります (必要以上に時間がかかる場合があります)。
あなたの最善の策は、行ごとに単一をレンダリングする代わりに<ui:repeat>
orを使用することです。これにより、チェックボックスごとに を指定できます。これには、プロパティの設定方法の技術的な変更のみが必要です。<h:dataTable>
<p:selectBooleanCheckbox>
styleClass
selectedMovies
これは具体的なキックオフの例です<h:dataTable>
(注:<p:selectManyCheckbox>
それ自体も を生成する<table>
ため、レイアウト技術的にはそれほど違いはありません<ui:repeat>
。テーブルが意味的に気になる場合はいつでも選択できます):
<h:dataTable value="#{bean.movies}" var="movie" styleClass="ui-selectmanycheckbox ui-widget">
<h:column>
<p:selectBooleanCheckbox id="checkbox" converter="javax.faces.Boolean"
value="#{bean.checkedMovieIds[movie.id]}" styleClass="#{movie.type}" />
</h:column>
<h:column>
<p:outputLabel for="checkbox" value="#{movie.title}" />
</h:column>
</h:dataTable>
<p:commandButton value="Submit" actionListener="#{bean.collectMovies}" action="#{bean.submit}" />
注:
- は
<h:dataTable styleClass>
とまったく同じ CSS を使用する<p:selectManyCheckbox>
ため、チェックボックス テーブルのルックアンドフィールはまったく同じです。
- これは (実際には
converter="javax.faces.Boolean"
驚いたことに) 必須です。この問題は には存在しません。おそらく PF のバグですか?true
false
String
Boolean
<h:selectBooleanCheckbox>
- この特定のユース ケースで作成された は、通常は一意の自動割り当て DB 識別子を表す個々の「id」値ごとに個別のスタイル クラスを指定するのはばかげているように見えるため、
styleClass="#{movie.type}"
よりも理にかなっています。styleClass="#{movie.id}"
必要に応じて、実際のコードでいつでも変更できます。
- は、実際のメソッド
actionListener
の前に を収集するジョブを実行します。もちろん、実際のメソッドでジョブを実行することもできますが、これはもはやそれほど明確に分離されていません。selectedMovies
action
action
バッキング Bean は次のようになります (プロパティがあるcheckedMovieIds
と仮定します)。Movie
Long id
private List<Movie> movies;
private Map<Long, Boolean> checkedMovieIds;
private List<Movie> selectedMovies;
@PostConstruct
public void init() {
movies = populateItSomehow();
checkedMovieIds = new HashMap<Long, Boolean>();
}
public void collectMovies(ActionEvent event) {
selectedMovies = new ArrayList<Movie>();
for (Movie movie : movies) {
if (checkedMovieIds.get(movie.getId())) {
selectedMovies.add(movie);
}
}
}
public void submit() {
System.out.println(selectedMovies);
// ...
}
// +getters (note: no setters necessary for all those three properties)
#{movie.type}
が値action
、comedy
、fantasy
およびhorror
(ちなみにこれは完全な型の候補です) を持つことができると仮定するとenum
、次のように個々のチェックボックスをスタイルできます。
.action .ui-chkbox-box {
background-color: red;
}
.comedy .ui-chkbox-box {
background-color: orange;
}
.fantasy .ui-chkbox-box {
background-color: green;
}
.horror .ui-chkbox-box {
background-color: blue;
}