簡単なセットアップ (そして大きな問題) を取得しました: 空のパネル グリッド アイテム コンテナーと Bean へのバインディングを含む JSP ページです。
<h:panelGrid binding="#{ bean.container }" id="container" />
Bean の getter が呼び出されると、コンテナには、内部にコマンド リンクを含むランダムな数の列が入力されます。ここまでは順調ですね。コンテナーは適切な数の要素で満たされ、リンクで ActionListener を使用して、すべてのクリック イベントを取得します。
ここでトリッキーな部分があります。別のスタイル クラスを使用して、「選択済み」列または「押された」列をマークしたいのです。static setupでは、次のような式でこれを行います。
<h:column styleClass="#{ bean.selectedColumn eq 'id' ? 'btnSelected' : 'btn' }">
<!-- command link and some blahblah -->
</h:column>
Bean にはgetSelectedColumn()
、ID を返す単純な getter が含まれています。簡単なので、これは完璧に機能します!
しかし、 bean の中で同じことをしようとすると、
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
String expression = "#{ bean.selectedColumn eq 'id' ? 'btnSelected' : 'btn' }";
new ExpressionFactoryImpl().createValueExpression(elContext, expression, String.class);
column.setValueExpression("styleClass", valueExpression);
式が解決されることはありません。明確にするために、コマンドリンク、列、および値式の両方が bean 内で生成されます。それが原因ですか?
誰でも理由を教えてもらえますか? 前もって感謝します!