1

簡単なセットアップ (そして大きな問題) を取得しました: 空のパネル グリッド アイテム コンテナーと 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 内で生成されます。それが原因ですか?

誰でも理由を教えてもらえますか? 前もって感謝します!

4

1 に答える 1

1

JSPがコンパイルされると、Beanは呼び出されません。これは実行時に実行されるため、Beanのライブデータを確認する必要があります。したがって、(後で)生成されたELは、コンパイル時に表示されません。ELは実行時に解決されません。

于 2011-05-09T21:42:58.307 に答える