0

我正在创建一个使用 jsf、html、java 和 JavaDB 的网站。我的一个页面将列出许多代表客户可以选择的菜单的图像。在页面底部有一个selectManyCheckbox与图像对应的选项。当客户选择了菜单组合时,“订购”按钮将引导客户到下一页。在此页面上列出了有关客户的其他信息(从数据库中检索),例如:Customer numberContact 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>
4

1 回答 1

0

替换Set<String>List<String>or String[],以便您可以在 an 的帮助下生成所需的输入组件,<ui:repeat>如下所示:

<ui:repeat value="#{orderBean.menus}" varStatus="loop">
    <h:inputText value="#{orderBean.menus[loop.index]}" />
</ui:repeat>

就像<h:dataTable>,它Set直到即将到来的 JSF 2.2 才支持。另请注意,您确实需要通过列表/数组索引而不是 via 来引用输入值,<ui:repeat var>原因很简单,它String是不可变的并且没有 setter 方法。

最后但并非最不重要的一点是,在处理表单提交期间,此构造将失败,因为您的 bean 是请求范围的,因此在将表单呈现给最终用户后直接被丢弃。将它放在更广泛的范围内,例如视图、对话或会话范围。否则 JSF 将无法在初始列表/数组中设置提交的值。

于 2013-03-14T02:58:04.020 回答