我希望用户在JSF的inputText组件中输入一个或多个名称。 所以我在想这样一个托管bean:
public class MyBean {
private String[] names;
public String[] getNames() {
return names;
}
public void setNames(String[] names) {
this.names = names;
}
}
但是,如何将JSF的inputText组件映射到此数组属性?
答案 0 :(得分:14)
首先,您需要在bean的(post)构造函数中保留数组。 E.g。
public MyBean() {
names = new String[3];
}
然后,您可以 只通过硬编码索引
访问它们<h:inputText value="#{myBean.names[0]}" />
<h:inputText value="#{myBean.names[1]}" />
<h:inputText value="#{myBean.names[2]}" />
或使用<ui:repeat>
与varStatus
通过动态索引访问它们
<ui:repeat value="#{myBean.names}" varStatus="loop">
<h:inputText value="#{myBean.names[loop.index]}" />
</ui:repeat>
不使用{/ 1}}属性,如
var
提交表单时不起作用,因为<ui:repeat value="#{myBean.names}" var="name">
<h:inputText value="#{name}" />
</ui:repeat>
没有值的设置器(getter基本上是String
方法)。
答案 1 :(得分:2)
这是我如何使用上面的例子。
<c:forEach items="#{cotBean.form.conductor}" varStatus="numReg">
<ice:panelGroup>
<ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].gender}">
</ice:selectOneMenu>
</ice:panelGroup>
<ice:panelGroup>
<ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.day}">
</ice:selectOneMenu>
<ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.month}">
</ice:selectOneMenu>
<ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.year}">
</ice:selectOneMenu>
</ice:panelGroup>
</c:forEach>