作为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) 我有一个带有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)