如何在JSF </h:inputtext>中的后端动态呈现<h:inputtext>值

时间:2012-12-23 15:15:11

标签: jsf jsf-2

我能够呈现动态,但不知道如何在后端获取这些动态创建的值。

test.xhtml

<h:form>
        Insert Your Desire Number : <h:inputText value="#{bean.number}">
        <f:ajax listener="#{bean.submitAjax}" execute="@form" render="@form" event="keyup" />
        </h:inputText>
        <br></br>
        <h:outputText value="#{bean.text}" />
        <h:dataTable value="#{bean.items}" var="item">
            <h:column>
                <h:inputText value="#{item.value}" />
            </h:column>
        </h:dataTable>
        <h:commandButton value="Submit" action="#{item.submit}" />

    </h:form>

如果我渲染3个输入框,当我提交按钮时我只得到最后一个值,有人可以指导我我该怎么办

Bean.java

@ManagedBean(name="bean")
@SessionScoped
public class Bean {
private int number;
private List<Item> items;
private Item item;
//getter and setter are omitted
public void submitAjax(AjaxBehaviorEvent event)
{
    items = new ArrayList<Item>();
    for (int i = 0; i < number; i++) {
        items.add(new Item());
    }
}
}

Item.java

private String value;
//getter and setter are omitted
public void submit() {
        System.out.println("Form Value : "+value);

}

1 个答案:

答案 0 :(得分:1)

您的submit()方法位置错误。您应该将它放在托管bean上,而不是放在实体上。

如此,

<h:commandButton value="Submit" action="#{bean.submit}" />

public void submit() {
    for (Item item : items) {
        System.out.println(item.getValue());
    }
}

或更正式,

@EJB
private ItemService service;

public void submit() {
    service.save(items);
}