小编Ale*_*lex的帖子

h:在ui:repeater中的inputText在ajax更新后显示错误的值

我有一个带有ui:repeater标签的JSF页面,它只显示一个字符串列表和一些控件,用于将字符串添加到列表中.添加字符串时,我使用ajax更新转发器标记,并在不刷新页面的情况下立即显示新字符串.这是我的页面的样子:

<h:body>
    <h:form>
        <p:inputText id="name" value="#{testController.newString}"/>
        <p:commandButton value="Add" actionListener="#{testController.addString}" update="strings" />
    </h:form>       

    <h:panelGroup id="strings">         
        <ui:repeat var="str" value="#{stringModel.strings}" varStatus="stringData">                                                                                                             
            <div>                                       
                <h:outputText value="#{str}" />
                <h:inputText value="#{str}" />
            </div>                                                                                  
        </ui:repeat>
    </h:panelGroup>                              

</h:body>
Run Code Online (Sandbox Code Playgroud)

除inputText组件外,一切正常.用Ajax更新ui-repeater后,仍会显示前一个字符串中的文本.例如,假设我最初有一个包含2个字符串的列表,"val1"和"val2".我输入一个名为"val3"的新字符串并提交表单.列表在服务器端正确更新,转发器更新,现在有3个元素.但是,当新添加的元素中的h:outputText将正确显示"val3"时,inputText将以"val2"作为值显示.所以我最终看起来像这样:

output tag     input tag
val1           val1
val2           val2
val3           val2 (???)
Run Code Online (Sandbox Code Playgroud)

支持bean非常简单:视图范围模型bean

@Component
@Scope("view")
public class StringModel {

    private List<String> strings = Lists.newArrayList("Value 1");

    public List<String> getStrings() {
        return strings;
    }

    public void setStrings(List<String> strings) {
        this.strings = strings;
    }   
}
Run Code Online (Sandbox Code Playgroud)

一个请求作用域控制器bean:

@Component
@Scope("request")
public class TestController {

    private String …
Run Code Online (Sandbox Code Playgroud)

ajax jsf primefaces uirepeat

2
推荐指数
1
解决办法
6587
查看次数

标签 统计

ajax ×1

jsf ×1

primefaces ×1

uirepeat ×1