我已经获得了以下代码。我删除了facet和类似的标签,使其更具可读性。我非常怀疑他们是个问题。我将Primefaces 6.1用于所有标签,除了表格标签是Omnifaces。
<h:form id="form">
<p:dataTable id="table" value="#{data.rows}" var="row" rowIndexVar="index">
<p:column id="ajaxColumn" rendered="#{true}">
<p:inputText id="ajaxValue" value="#{row.ajaxValue}">
<p:ajax event="blur" process="@this" update="@this form-table-#{index}-targetColumn" listener="#{bean.ajaxMethod(index)}"/>
</p:inputText>
<p:column>
<p:column id="targetColumn"rendered="#{true}">
<p:inputText id="targetValue" value="#{row.targetValue}"/>
</p:column>
</p:dataTable>
</h:form>
我想更新&#39; targetValue&#39;在&#39; ajaxValue&#39;之后,inputText带有一个新值inputText取消选择导致模糊事件。 ajax调用应该在&#39; ajaxValue&#39;内发送值。到后端并设置&#39; targetValue&#39;因此在豆子里。之后,&#39; targetValue&#39;应该用新值更新。
我的问题是当我添加&#34; form-table - #{index} -targetColumn&#34;到了ajax标签的更新属性,&#39; targetValue&#39;从一开始就一直空着。它在前端没有任何价值。如果我添加&#34; form-table-0-targetColumn&#34;相反,只有第一个&#39; targetValue&#39;没有价值。
在调试时查看getter调用,它们的行为是相同的,无论我是否有更新属性。
有什么想法吗?
编辑:澄清。 ID中的分隔符应该是&#39; - &#39;而不是&#39;:&#39;,因为它们通常是我认为的。
答案 0 :(得分:1)
在数据表中,您无法使用索引来更新行。如果你想更新同一行中的某个元素,你应该只使用update =“targetColumn”。
(某处必须有重复,但我找不到它,直到我这样做,我会在这里留下这个答案