2012-02-18 59 views
3

我试图用prependId来缩短更新命令。 如果我始终使用合格的ID,一切工作正常。 如果我使用prependId,该ID无法找到:鉴于:JSF - prependId不工作?

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

无法找到标识成分“表”。

我在做什么错?

+1

不应该只是'表'吗? – 2012-02-18 17:29:13

+0

没有BC有闭合标签,所以如果你想从外面更新标签,你必须使用“:”。正如我写的,它与特定的ID一起工作。我只是想知道prependId是如何工作的... – membersound 2012-02-18 17:46:58

回答

4

如果您想从外部更新标签,您必须使用“:”。正如我写的,它与特定的ID一起工作。我只是想了解prependId是如何工作的...

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

如果你不相信我,然后在Firebug中尝试一下,注意Primefaces dataTable的最外面的div元素的ID仅为table。更新将能够找到这个无论形式,因为它正在寻找与此匹配的页面上的ID。

这可能很危险,因为它可能会非常容易地意外地在DOM上存在冲突的相同ID的多个组件。对于其他页面或通过包含组件,第三方或以其他方式在内部具有唯一ID的内部DOM元素的页面上,页面更加真实。这些问题可能非常难以追查。

+1

好,所以使用完全合格的ID更好。 TY! – membersound 2012-02-20 18:51:18