我正在创建一个使用jsf,html,java和JavaDB的网站。我的一个页面将列出一些代表客户可以选择的菜单的图像。在页面底部有一个selectManyCheckbox
,其中的选项与图像相对应。当客户选择了菜单组合时,“订购”按钮将引导客户进入下一页。在此页面上列出了有关客户(从数据库中检索)的其他信息,例如:Customer number
,Contact name
等。除此之外,所选菜单应列在表格中,并且列出的行数应与所选菜单的数量相同。我的主要问题是我想在所选菜单字段中使用从selectManyCheckbox
收集的数据作为我的输入,其余的是从数据库中收集的(我已经完成并且它可以工作)。如何将值作为单独的值获取?我只能在输出文本中使用它们,而不能在输入字段中使用它们。
Java代码:
@Named
@RequestScoped
public class OrderBean implements java.io.Serializable {
private Set<String> menus = new TreeSet<String>();
public Set<String> getMenus() {
return menues;
}
public void setMenus(Set<String> newValue){
menus = newValue;
}
public SelectItem[] getMenuesItems(){
return menuesItems;
}
private static SelectItem[] menuesItems = {
new SelectItem("Menu 1"),
new SelectItem("Menu 2"),
new SelectItem("Menu 3")
};
}
JSF,HTML:
<div class="clear"></div>
<div id="frame">
<div id="frameCheckBox"><h:commandButton value="#{mld.Order}" action="Order"/>
<h:selectManyCheckbox value="#{orderBean.menus}">
<f:selectItems value="#{orderBean.menusItems}"/>
</h:selectManyCheckbox>
</div>
</div>
答案 0 :(得分:0)
将Set<String>
替换为List<String>
或String[]
,以便您可以借助<ui:repeat>
生成所需的输入组件,如下所示:
<ui:repeat value="#{orderBean.menus}" varStatus="loop">
<h:inputText value="#{orderBean.menus[loop.index]}" />
</ui:repeat>
与<h:dataTable>
一样,它在即将到来的JSF 2.2之前不支持Set
。还请注意,您确实需要通过列表/数组索引而不是通过<ui:repeat var>
来引用输入值,原因很简单String
是不可变的并且没有setter方法。
最后但并非最不重要的一点是,这个结构在处理表单提交时将失败,因为您的bean是请求作用域,因此在将表单呈现给最终用户后直接进行服务。把它放在更宽的范围内,例如视图,会话或会话范围。否则,JSF将无法在初始列表/数组中设置提交的值。