3

Beanのような中心点でコンポーネントのイベントリスナーを登録する方法はありますか?

このようなことは可能ですか?

@PostConstruct
public void setup() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    UIViewRoot view = facesContext.getViewRoot();
    view.getComponentByName("toolBar:save").addActionListener(com.sample.SaveListener);
    view.getComponentByName("form:save").addActionListener(com.sample.SaveListener);
}
4

1 に答える 1

3

Beanの(ポスト)構築中に、必ずしもすべてのコンポーネントが使用できるわけではありません。ELが#{bean}初めて解決する必要があるときはいつでも、Beanが構築されますが、これは時期尚早である可能性があります。代わりに、プリレンダリングビューイベント中に実行してください。

ビューに次のタグを追加します。

<f:event type="preRenderView" listener="#{bean.setup}" />

次に、その方法で必要な作業を行うことができます。

public void setup() {
    UIViewRoot view = FacesContext.getCurrentInstance().getViewRoot();
    ((UICommand) view.findComponent("toolBar:save")).addActionListener(new com.sample.SaveListener());
    ((UICommand) view.findComponent("form:save")).addActionListener(new com.sample.SaveListener());
}
于 2012-05-30T13:16:05.383 に答える