2
レンダリング中に子コンポーネントを追加することはできますか? JSF 1.2環境で子コンポーネントを動的に追加するベストプラクティスは何ですか?ありがとうレンダリング時にJSFコンポーネントを挿入/追加する
レンダリング中に子コンポーネントを追加することはできますか? JSF 1.2環境で子コンポーネントを動的に追加するベストプラクティスは何ですか?ありがとうレンダリング時にJSFコンポーネントを挿入/追加する
あなたが行うことができるより良い場所はPhaseListenerの実装です。例えば
ビューのルートへの新しいコンポーネントを追加する方法を次のコードスニペットのサンプル:
public class ViewModifierPhaseListener implements
javax.faces.event.PhaseListener {
@Override
public void afterPhase(PhaseEvent event) {
}
// Just sampling add component on ViewRoot
@Override
public void beforePhase(PhaseEvent event) {
// Gets the target component from ViewRoot
UIViewRoot viewRoot = event.getFacesContext().getViewRoot();
UIComponent parent = viewRoot.findComponent("parentComponentId");
// UIComponents to create depend on JSF implementation,
// Try to use the available factories when suplied by the implementation
UIComponent child = Factory.getComponent("ComponentClassName");
// Customize the component, for instance it has to be disabled
child.getAttributes().put("disabled", true);
// Adds the fresh created component to the parent
parent.getChildren().add(child);
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
}
を使用すると、コンポーネントツリーを持っているという段階にあるため、getPhaseIdがRENDER_RESPONSEフェーズを返すことに注意してくださいは、コンプリート。
<lifecycle>
<phase-listener>your.package.ViewModifierPhaseListener</phase-listener>
</lifecycle>
それとも、Faceletsをして作業する場合、あなたがしたいページのテンプレートで定義することができます:
あなたの位相リスナーの定義は次のように顔-config.xmlののライフサイクルの要素に設定する必要がありますリスナーの影響を受けます。これにより、PhaseListenerをいつ実行するかを区別するのに役立ちます。
<f:phaseListener type="your.package.ViewModifierPhaseListener"/>
具体的な例がありますか? –
基本的には、変数をとるコンポーネントを作成してブール値としましょう。真であればコンポーネントの中に子入力を追加したいので、入力を使ってdiv内に入るようにしますレンダラクラスにレンダリングするのではなく、レンダラクラスを使用します。 –
Seamでやるのは簡単ですが、jsfだけでは100%ではないことがわかります。これを試してみてください。http://www.coderanch.com/t/212933/JSF/java/if-like-JSF-conditions、それはひどいかもしれないpanelGroupに言及しています –