JSF - prependId不工作?

时间:2012-02-18 17:27:05

标签: java jsf

我正在尝试使用prependId来缩短更新命令。 如果我在整个过程中使用合格的ID,一切正常。 如果我使用prependId,则无法找到id:

<h:form id="form">
<p:dataTable id="table">
//closing tags

<p:commandButton update=":form:table"> //works



<h:form prependId="false">
<p:dataTable id="table">
//closing tags

<p:commandButton update=":table"> //works NOT!

在视图中找不到标识符为“:table”的组件。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

  

如果您想从标签外部更新,则必须使用“:”。并且正如我所写,它适用于特定的id。我只是想知道prependId是如何工作的......

仅在prependId="true"时才正确。 update属性需要clientId进行更新,并且通过将prependId设置为false,您声明该表单中的所有元素将具有与它们具有服务器ID相同的clientId。正如Jigar在上面的评论中已经提到的那样,它应该只是table

如果您不相信我,那么请在Firebug中亲自尝试,并注意Primefaces dataTable的最外层div元素的id为table。更新将能够找到这个,无论形式如何,因为它正在寻找与此匹配的页面上的ID。

这可能很危险,因为在DOM上可能很容易意外地使多个组件具有相同的ID。对于其他页面或通过包含组件,第三方或其他页面的页面来说更是如此,其中内部DOM元素也具有唯一ID。这些问题很难追查。