我将 Primefaces 3.3.1 与 Tomcat 7.0.22.0 一起使用。我有 p:dataTable 其中有 p:inputText 。该 p:dataTable 的 id 是“houseTabID:tabView:form0:table”。这是从 HTML 源代码复制粘贴的。我让对话框(它在数据表所在的表单之外)通过 p:dataTable 中的按钮打开,并且该对话框中的 p:commandButton 更新了 dataTable。
p:commandButton 看起来像这样;
<p:commandButton ajax="true" action="#{myBean.setInputText()}"
value="OK"
update="#{myBean.getUpdateTarget(0)}"/>
myBean.getUpdateTarget(0) 重新运行正确的字符串以指向目标组件。
我可以通过指定“houseTabID:tabView:form0:table”(意味着 myBean.getUpdateTarget(0) 返回该字符串)成功更新整个 dataTable。但是我在表格中有很多行,所以更新整个表格需要更长的时间才能完成,并且滚动位置被重置,这真的很烦人。这让我只想更新表格中的一行,而不是全部。
所以我首先返回“houseTabID:tabView:form0:table:inputBox”来更新我想要更新的 p:inputText。在 p:dataTable 我有一些看起来像这样的东西;
<p:column headerText="Value"
width="300" style="height:16px; font-size:9pt;">
<p:inputText id="inputBox" value="#{myItem.value}"
style="width:95%; height:11px; font-size:9pt;">
<f:ajax execute="@this" event="blur" />
</p:inputText>
</p:column>
结果:没有更新,没有错误日志。我知道“houseTabID:tabView:form0:table:inputBox”不起作用,因为它没有指定表中的行。因此,通过使用 rowIndexVar,我尝试使用“houseTabID:tabView:form0:table:0:inputBox”制作:0: 部分来自 rowIndexVar。该字符串是从 HTML 源代码复制粘贴的。但不幸的是,我得到了例外。
javax.faces.FacesException: Cannot find component with identifier ":houseTabID:tabView:form0:table:0:inputBox" referenced from "houseTabID:j_idt181:j_idt186".
为什么?显然有“houseTabID:tabView:form0:table:0:inputBox”,我在 HTML 源代码上看到它,我可以用“houseTabID:tabView:form0:table”更新整个 talbe,但用“houseTabID:tabView:form0”抛出异常:表:0:输入框“?这对我来说没有意义。另外,为什么它不会抛出任何异常或使用“houseTabID:tabView:form0:table:inputBox”溢出错误日志?我验证了那个 p:commandButton 的 HTML 源代码;
onclick="PrimeFaces.ab({source:'houseTabID:j_idt190:j_idt195',update:'houseTabID:tabView:form0:table:inputBox',
我非常想只更新一行而不是整个 p:dataTable。请帮我。