更新primefaces命令按钮属性的值

时间:2012-06-19 09:43:37

标签: ajax jsf-2 primefaces

我在这里查询了关于primefaces命令按钮的update属性的值。

这是一个简单的代码。我有一个简单的xhtml页面

<h:body>
<h:form id="main">
    <p:growl id="maingrowl" showDetail="true"></p:growl>
    <p:panelGrid id="mainpanel" columns="2">

            <p:commandButton value="Ajax Submit" update="test" id="ajax"
                actionListener="#{mytestBean.display}" />


    </p:panelGrid>

    <p:panelGrid id="test" rendered="#{mytestBean.show}" columns="1">
        <h:inputText value="#{mytestBean.val1}" />
        <h:inputText value="#{mytestBean.val2}" />
        <p:commandButton value="value in" id="aj" update="test"
            actionListener="#{mytestBean.displaysec}">
            </p:commandButton>
    </p:panelGrid>

</h:form>
</h:body>

现在,如果我必须更新panelgrid“test”,那么在第一个命令按钮中,我必须在命令按钮的update属性中提供前缀为“:main:”的id“test”,因为这是确切的我在浏览器的视图源中找到了HTML中的id。但是,我甚至可以通过更新属性中的“test”进行更新。 所以我的问题是我应该何时在id中使用“:”或者是强制性的,还是有任何预先定义的规则来赋予属性中的id?

另外,我知道update属性中给出的id是通过放置它的UINamingContainer。请原谅我,如果它是微不足道的,我真的很困惑。

任何帮助非常感谢。 谢谢。

1 个答案:

答案 0 :(得分:4)

如果两个组件(要更新的组件和触发更新的组件)都在同一个NamingContainer中,那么:的相对客户端ID就足够了。

jsf中的NamingContainers是所有那些将自己的id添加到所有子组件的客户端ID的组件,例如<h:form><h:dataTable><ui:repeat>(或者更确切地说:实现javax.faces.component.NamingContainer接口的所有组件)。

如果两个组件在同一个NamingContainer中,则必须使用视图根目录中以:开头的绝对ID。

如果您对更详细的信息感兴趣,我建议您阅读描述搜索算法的UIComponent#findComponent()方法的javadoc。

请注意,:是用于分隔clientId段的默认字符。您可以使用web.xml中的上下文参数进行更改。