使用表格(h:dataTable
)。
我的应用程序要动态添加例如:我的应用程序要求输入城市并提供一个城市,但是用户想要添加更多城市,我需要更动态地提供他,所以如何在JSF中做到这一点?] >
我是我的应用程序,我想为动态添加更多,例如:我的应用程序要求输入城市并提供一个城市,但是用户想要添加更多城市,我需要更动态地提供他,所以如何...
使用表格(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}"/>
在bean中:
private List<String> cities = new LinkedList<String>();
//getter and setter
...
public String enlargeList () {
cities.add ("");
return "refreshTable"; //the easiest way - just reload the page
}
如果城市数量有限,除非需要,您可以使用rendered属性隐藏字段。您可以使用component并将其与HtmlPanelGrid绑定在后备bean中。然后,您可以根据需要动态添加组件。在这里,我添加了outputText。页面代码:
<ice:panelGrid binding="#{backingBean.gridComponent}"/>
Backing Bean:
private HtmlPanelGrid gridComponent; public void someFunction(){ HtmlOutputText outPutText = new HtmlOutputText(); outPutText.setValue("Some Text"); gridComponent.getChildren().add(outPutText);
}// SETTERS / GETTERS
我喜欢Nayan Wadekar的解决方案!我做了同样的事情,只是我想知道如何获取我添加到此面板中的InputText的值!?我可以找到UIComponent,但是SubmittedValue / Value为null ..我该如何改变呢?
问候西蒙
使用表格(h:dataTable
)。
页面代码:
我做了同样的事情,只是我想知道如何获取我添加到此面板中的InputText的值!?我可以找到UIComponent,但是SubmittedValue / Value为null ..我该如何改变呢?