如何在JSF中动态添加<h:inputtext>?</h:inputtext>

时间:2010-09-11 08:22:32

标签: java jsf

我的应用程序我想为ex添加更多动态:我的应用程序要求输入城市并提供一个但是用户想要添加更多城市,我需要更动态地提供给他,那么如何在JSF中做到这一点?

3 个答案:

答案 0 :(得分:2)

使用表格(h:dataTable)。

总体思路:你有一个字符串列表(每个代表城市名称)。开始时列表中只有1个项目 - 1个空字符串。

如果你想再添加一个城市,你可以做一些动作(例如按“添加更多城市”按钮),这个动作再将一个空字符串放到列表中,你的表应该被重新呈现(通过ajax或整个页面重新加载)。

之后,您将在页面上获得2个输入字段,每个字段都绑定到自己的字符串值。然后,用户输入城市名称,按“处理”按钮,然后调用一些操作,您可以在其中处理已包含2个非空字符串的列表。

<h:dataTable value="#{dataTableBean.cities}" var="city">
    <h:column>
    <f:facet name="header" >
        <h:outputText value="City name"/>
    </f:facet>    
    <h:inputText value="#{city}"/>
    </h:column>
</h:dataTable>

<h:commandButton value="Add one more city" action="#{dataTableBean.enlargeList}"/>
<h:commandButton value="Submit" action="#{dataTableBean.processList}"/>

在豆子里:

private List<String> cities = new LinkedList<String>();

//getter and setter
...

public String enlargeList () {
    cities.add ("");
    return "refreshTable"; //the easiest way - just reload the page
}

答案 1 :(得分:0)

如果是有限数量的城市,您可以使用呈现的属性隐藏字段,除非需要。

答案 2 :(得分:0)

您可以使用组件并将其与支持bean中的HtmlPanelGrid绑定。然后,您可以根据需要动态添加组件。这里我添加了outputText。

网页代码:

<ice:panelGrid binding="#{backingBean.gridComponent}"/>

支持Bean:

private HtmlPanelGrid gridComponent;

public void someFunction(){

HtmlOutputText outPutText = new HtmlOutputText();
outPutText.setValue("Some Text");

gridComponent.getChildren().add(outPutText);

}

// SETTERS / GETTERS