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
}
マネージャーで、ユーザー 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
いるため、ユーザーは値を編集および変更できます。Facelet コード:
<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}
。セッターメソッドとゲッターメソッドがあるため
、機能していると推測できます。では、リスト オブジェクト
を更新するにはどうすればよいでしょうか。
私の POJO 設計は貧弱ですか? または使用するのは悪い考えですか?
どうすればこれを達成できますか?#{user.name}
name
emails
ui:repeat
注: 現在の Mojarra のバージョンは 2.1 です。