我想在同一页面中编辑项目列表。应使用单独的表单编辑每个项目。我在ui中创建一个h:form:repeat。仅在提交最后一个表单时,用户输入才会应用于托管bean。对于所有其他表单,用户输入不会应用于模型。
@ManagedBean
public class Controller {
Logger logger = Logger.getLogger("TestWeb");
private List<Customer> customerList;
public List<Customer> getCustomerList() {
if (customerList == null) {
customerList = new ArrayList<Customer>();
customerList.add(new Customer("Daffy Duck", "daffy@example.com"));
customerList.add(new Customer("Bugs Bunny", "bugs@example.com"));
customerList.add(new Customer("Samity Sam", "sam@example.com"));
}
return customerList;
}
public String updateCustomer(Customer c) {
logger.info("Updating: " + c.getName());
return null;
}
}
在视图中,我有
<ui:repeat var="c" value="#{controller.customerList}">
<h:form>
<h3>Edit Customer</h3>
Name: <h:inputText value="#{c.name}"/><br/>
E-mail: <h:inputText value="#{c.email}"/><br/>
<h:commandButton value="Update"
action="#{controller.updateCustomer(c)}"/>
</h:form>
</ui:repeat>
我搜索了几个小时没有任何解决方案。这样做的正确方法是什么?我可以通过使用单个表单并在其中使用ui:repeat来破解它。但是有很多问题,我宁愿不采取这种方式。感谢。
答案 0 :(得分:9)
这是Mojarra中<ui:repeat>
状态保存的错误。 http://java.net/jira/browse/JAVASERVERFACES有几个类似的问题报告,其中包括issue 2243。
你基本上有两个选择:使用另一个迭代组件(例如<c:forEach>
,<h:dataTable>
,<t:dataList>
,<p:dataList>
等),或者用MyFaces取代Mojarra({此构造中的{1}}在那里正常工作。