gpt4 book ai didi

jsf - 在 ui :repeat to update ArrayList of values is not working 中使用 inputText

转载 作者:行者123 更新时间:2023-12-04 09:33:24 25 4
gpt4 key购买 nike

<分区>

关于博文的标题,我正在尝试从 ui:repeat 中的 h:inputText 更新 ArrayList 的值,但这是行不通的。
请参阅以下模型以进一步了解:

我有一个 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
}

在我的管理器中,我创建了用户 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);
}
}
//Setters Getters
}

现在在我的 Facelet 中,我使用 ui:repeat 将数据加载到 h:inputText 到表中,以便用户可以编辑和更改值。面面代码:

<h:form id="userForm">
<table border="1">
<ui:repeat var="user" value="#{userManager.userList}">
<tr>
<td><h:inputText value="#{user.name}"/> </td>

<ui:repeat var="email" value="#{user.emails}">
<td><h:inputText value="#{email}"/> </td>
</ui:repeat>
</tr>
</ui:repeat>
</table>

<h:commandButton value="Save" action="#{userManager.action}">
<f:ajax execute="@form @this"/>
</h:commandButton>
</h:form>

当我编辑 #{user.name} 但它不适用于 #{email} 时,上述方法工作正常。
我可以假设它适用于 #{user.name} 因为 name 有 setter 和 getter 方法。
那么如何更新 emails 列表对象。
是我的POJO设计不好吗?还是使用 ui:repeat 是个坏主意?
我怎样才能做到这一点?

注意:我当前的 Mojarra 版本是 2.1

25 4 0