簡體   English   中英

f:ui中的ajax:重復渲染h:outputText但無法渲染/更新h:inputText

[英]f:ajax in ui:repeat renders h:outputText but fails to render/update h:inputText

我在<ui:repeat>里面的<h:inputText>上遇到了<f:ajax>的問題。 它成功地使用新值呈現<h:outputText> ,但不是<h:inputText> (兩者都綁定到同一屬性)。 但是,如果我將<f:ajax>更改為渲染@form@all ,則可以正常工作。 但我顯然不希望/需要呈現整個表單。

我正在使用Mojarra 2.2.4。 這是index.xhtml

<h:form>
    <table>
        <ui:repeat var="line" value="#{myBean.lines}">
            <tr>
                <td>
                    <h:inputText value="#{line.number}">
                        <f:ajax event="change" execute="@this" render="desc1 desc2" listener="#{myBean.onChangeLineNumber(line)}"/>
                    </h:inputText>
                </td>
                <td>
                    <h:inputText id="desc1" value="#{line.desc}"/>
                    <h:outputText id="desc2" value="#{line.desc}"/>
                </td>
            </tr>
        </ui:repeat>
    </table>
</h:form>

這是@ViewScoped bean的相關位:

public void onChangeLineNumber(Line line)
{
    line.setDesc("Some new text " + System.currentTimeMillis());
}

這是怎么造成的,我該如何解決?

這是由Mojarra的<ui:repeat>狀態管理中的一個錯誤造成的,根據我的同事Arjan Tijms報告的問題3215 (實際上對於一個完全不同的問題,修復恰好解決了你的問題) 。 Mojarra 2.2.7中提供了此修復程序。 所以升級到至少那個版本應該這樣做。

否則,最好的辦法是用<h:dataTable>替換它,該組件的設計完全符合基於集合呈現HTML表的功能要求。 它還節省了一些HTML樣板。

<h:form>
    <h:dataTable value="#{myBean.lines}" var="line">
        <h:column>
            <h:inputText value="#{line.number}">
                <f:ajax render="desc1 desc2" listener="#{myBean.onChangeLineNumber(line)}"/>
            </h:inputText>
        </h:column>
        <h:column>
            <h:inputText id="desc1" value="#{line.desc}"/>
            <h:outputText id="desc2" value="#{line.desc}"/>
        </h:column>
    </h:dataTable>
</h:form>

(注意我從<f:ajax>刪除了event="change"execute="@this" ,因為這些是默認值,不需要重復默認值)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM