ajax - 更新 primefaces 命令按钮属性的值

标签 ajax jsf-2 primefaces

我在这里有一个关于为 primefaces 命令按钮的更新属性指定的值的查询。

这是一个简单的代码。我有一个简单的 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”,那么在第一个命令按钮中,我必须在命令按钮的更新属性中提供前缀为“:main:”的 id“test”,因为这是准确的HTML DOM 中的 id 与我在浏览器中的查看源代码中找到的一样。但是,即使只在更新属性中给出“测试”,我也能够进行更新。 所以我的问题是我什么时候应该在 id 中使用“:”,还是强制的,或者是否有任何预定义的规则来在属性中提供 id?

此外,我知道更新属性中给出的 id 是通过放置它的 UINamingContainer 来实现的。如果这是微不足道的,请原谅我,我真的很困惑。

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

最佳答案

如果两个组件(要更新的组件和触发更新的组件)位于同一个 NamingContainer 内,则为不带 : 的相对客户端 ID就足够了。

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

如果两个组件不在同一个 NamingContainer 内,则必须使用以 : 开头的绝对 ID从 View 根。

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

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

关于ajax - 更新 primefaces 命令按钮属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098406/

相关文章:

php - 如何在页面加载时显示ajax加载gif动画?

java - 如何使用 JSF 2 h :outputStylesheet? 实现 "CSS versioning"(以解决缓存问题)

jsf - 如何设置PrimeFaces主题?

jquery - Primefaces - 用于数据表中实时过滤的自定义组件

jsf - 如何呈现从选择 p :panel, 触发的 p :selectonemenu?

javascript - 断网重试功能

javascript - 即使 PHP 返回正确的数据,jQuery .post 也没有响应

javascript - 我必须单击按钮两次才能提交

jsf-2 - 在新浏览器选项卡中重新打开页面时如何重置 session 作用域 bean

java - JSF 的长轮询 - 有哪些选择?