访问由backing bean中的execute属性传递的所有ajax UIComponents?

时间:2015-03-04 11:31:38

标签: ajax jsf jsf-2

以下代码是与ajax组件一起使用的简单表单:

<h:form id="loginform">
    <h:inputText id="username">
        <f:ajax event="blur" execute="loginform:username loginform:loginbutton" ... />
    </h:inputText>
    <h:inputText id="password">
        <f:ajax event="blur" execute="loginform:password loginform:loginbutton" ... />
    </h:inputText>
    <h:commandButton id="loginbutton" value="login" action="#{indexBean.authentication()}" />
</h:form>  

我知道execute属性是一个空格分隔的ID列表,用于应该包含在Ajax请求中的组件。

我可以使用AjaxBehaviorEvent.getComponent()方法访问辅助bean的源组件,但是如何访问其余组件?

1 个答案:

答案 0 :(得分:2)

可由PartialViewContext#getExecuteIds()获取。

FacesContext context = FacesContext.getCurrentInstance();
Collection<String> executeIds = context.getPartialViewContext().getExecuteIds();
// ...

然后,您可以使用UIViewRoot#findComponent()按客户端ID查找组件。

for (String executeId : executeIds) {
    UIComponent component = context.getViewRoot().findComponent(executeId);
    // ...
}