Java ID更新组件的规则

Java ID更新组件的规则,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,我不熟悉JSF2和Primefaces,并且意识到了更新组件的问题 假设我有以下代码,我可以直接update=“counter” 我还没有在JSF1.2(和RichFaces)中遇到过这个问题,正确处理ID的规则是什么?在第一个示例中,JSF可以在与ajax listener相同的范围内查找计数器元素。表单实现NamingContainer,这意味着它用自己的id作为客户端id(在html中使用)的前缀,并为id创建一个独特的名称空间。查看浏览器下的页面源-将为您的计数器分配f1:计数器id。在

我不熟悉JSF2和Primefaces,并且意识到了更新组件的问题

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


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

在第一个示例中,JSF可以在与ajax listener相同的范围内查找计数器元素。表单实现NamingContainer,这意味着它用自己的id作为客户端id(在html中使用)的前缀,并为id创建一个独特的名称空间。查看浏览器下的页面源-将为您的计数器分配f1:计数器id。在第二个示例中,作用域中没有计数器元素(在表单f2中),因此查找失败

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

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

<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 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>