gpt4 book ai didi

java - id更新组件的规则

转载 作者:行者123 更新时间:2023-12-02 08:11:38 25 4
gpt4 key购买 nike

我是 JSF2 和 Primefaces 的新手,并且意识到更新组件存在问题。

假设我有以下代码,我可以直接 update="counter"

<h:form id="f1">
<h:outputText id="counter" value="#{clientBean.counter}" />
<h:graphicImage url="/images/circle-ok.png">
<p:ajax event="click" update="counter" process="@this"
listener="#{clientBean.tag}"/>
</h:graphicImage>
</h:form>

在另一个h:form中,我必须使用update="f1:counter"。只有 update="counter" 在这里不起作用。

<h:form id="f2">
<p:dataTable var="var" value="#{clientBean.vf}">
<p:column>
<f:facet name="header">Tag</f:facet>
<h:graphicImage url="/images/circle-ok.png">
<p:ajax event="click" update="f1:counter" process="@this"
listener="#{clientBean.tag}" />
</h:graphicImage>
</p:column>
</p:dataTable>
</h:form>

我在 JSF1.2(和 RichFaces)中没有遇到过这个问题,正确寻址 ids 的规则是什么?

最佳答案

在第一个示例中,JSF 可以在与 ajax 监听器相同的范围内查找计数器元素。 Form 实现了 NamingContainer,这意味着它用自己的 id 为客户端 id(在 html 中使用)添加前缀,并为 ids 创建不同的 namespace 。查看浏览器下的页面源代码 - 将会有 f1:counter id 分配给您的计数器。在第二个示例中,范围内(表单 f2 内)没有计数器元素,因此查找失败。

您可以使用 prependId="false"禁用此表单行为。如果您确定所有表单中不会有具有相同 id 的元素,这会非常有用。

Icefaces 的工作方式有所不同 - 它会自动计算 html 增量并将其作为部分更新发送到浏览器。在大多数情况下,这对程序员来说更方便,但会带来相当大的性能成本。我相信 JSF2 采用了icefaces 部分更新概念,但要求显式传递 ids。

关于java - id更新组件的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com