0

動的にレンダリングすることはできますが、動的に作成された値をバックエンドで取得する方法がわかりません。

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

}

4

1 に答える 1

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);
}
于 2012-12-23T15:16:19.433 に答える