p:如果inputText元素是ajax update属性的目标,则该元素为空

时间:2017-10-25 11:27:37

标签: ajax jsf primefaces

我已经获得了以下代码。我删除了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;,因为它们通常是我认为的。

1 个答案:

答案 0 :(得分:1)

在数据表中,您无法使用索引来更新行。如果你想更新同一行中的某个元素,你应该只使用update =“targetColumn”。

(某处必须有重复,但我找不到它,直到我这样做,我会在这里留下这个答案