确定JSF容器表单的ID


3

我需要从动作处理程序中确定表单字段的ID。该字段是包含的facelets组件的一部分,因此表单会有所不同。

included.xhtml

<ui:component> 
    <h:inputText id="contained_field"/> 
    <h:commandButton actionListener="#{backingBean.update}" value="Submit"/> 
</ui:component> 

example_containing.xhtml

<h:form id="containing_form"> 
    <ui:include src="/included.xhtml"/> 
</h:form> 

如何可予确定的形式的在运行时的update方法的ID?或者更好的是直接输入字段的ID。

5

将按钮绑定到您的支持bean,然后使用getParent()直到找到最近的表单。

  0

这正是我所担心的访问UI组件。我希望有更清洁的东西。 23 9月. 082008-09-23 19:39:55


0

以编程方式,我会使用jsight的方法。通过查看它,你可以知道你的元素的ID(除非你让JSF创建它们,我不知道在ID中编号的方法)。 h:form是一个命名容器,只要你没有将它包装在另一个命名容器中,它就会包含这个容器:containedfield默认情况下,':'是命名分隔符,JSF和id是以这种方式创建的(parentNamingContainerId:)* COMPONENTID


0

由于更新方法的类型为ActionListener的,你可以按照如下

public void update(javax.faces.event.ActionEvent ac) { 
     javax.faces.component.UIComponent myCommand = ac.getComponent(); 
     String id = myCommand.getId(); // get the id of the firing component 

     ..... your code ......... 

}