如何在输入字段中显示<h:selectmanycheckbox>的值?</h:selectmanycheckbox>

时间:2013-03-13 21:22:10

标签: jsf facelets

我正在创建一个使用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>

1 个答案:

答案 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将无法在初始列表/数组中设置提交的值。