<h:form> within <ui:repeat> not entirely working, only the last <h:form> is processed

房东的猫 提交于 2019-11-26 10:00:45

问题


I will like to edit a list of items in the same page. Each item should be edited using a separate form. I am creating a h:form within ui:repeat. Only when the last form is submitted, the user input is applied to the managed bean. For all other forms, user input is not applied to the model.

@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;
    }
}

In the view, I have

<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>

I search for hours without any solution. What will be the correct way to do this? I can hack it by using a single form and using a ui:repeat within it. But there are many issues with that and I will rather not take that route. Thanks.


回答1:


This is a bug in state saving of <ui:repeat> in Mojarra. There are several similar issue reports at http://java.net/jira/browse/JAVASERVERFACES, among others issue 2243.

You have basically 2 options: use another iterating component (e.g. <c:forEach>, <h:dataTable>, <t:dataList>, <p:dataList>, etc), or replace Mojarra by MyFaces (the <ui:repeat> in this construct works properly in there).



来源:https://stackoverflow.com/questions/12808878/hform-within-uirepeat-not-entirely-working-only-the-last-hform-is-proc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!