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 回答