相关疑难解决方法(0)

在ui:repeat中使用inputText来更新值的ArrayList是行不通的

作为Post的标题.我试图从h:inputText内部更新ArrayList的值ui:repeat,这是行不通的.
请参阅以下模拟以获得进一步理解:

我有一个POJO类如下:

public class User implements Serializable{
    private String name;
    private List<String> emails;

    public User(String name, List<String> emails) {
        super();
        this.name = name;
        this.emails = emails;
    }
    //Setters Getters
}
Run Code Online (Sandbox Code Playgroud)

在我的经理中,我创建了用户POJOS列表:

@ManagedBean
@ViewScoped
public class UserManager implements Serializable {
    private List<User> userList;
    public UserManager() {
        userList = new ArrayList<User>();
        ArrayList<String> emails= new ArrayList<String>();

        emails.add("user1.1@mail.com");
        emails.add("user1.2@mail.com");
        userList.add(new User("User1", (List<String>) emails.clone()));

        emails.clear();
        emails.add("user2.1@mail.com");
        emails.add("user2.2@mail.com");
        userList.add(new User("User2", (List<String>) emails.clone()));
    }
    public void action(){
    for(User u : userList){
        System.out.println(u); …
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2

3
推荐指数
1
解决办法
8580
查看次数

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
查看次数

标签 统计

jsf ×2

ajax ×1

jsf-2 ×1

primefaces ×1

uirepeat ×1