s:String列表中的selectItems?

时间:2012-04-23 21:14:49

标签: jsf seam seam2

我在JBoss AS 5上使用seam 2.2.2.Final。我正在开发一个多页向导。在我的第一页上,用户将能够在textarea上输入由新行分隔的多个商业名称。

<s:decorate id="businessNameTextAreaField" template="layout/edit.xhtml">

                    <ui:define name="label">Business Names</ui:define>

                    <h:inputTextarea id="businessNameTextArea"

                                   cols="80"

                                   rows="3"

                               required="true"

                                  value="#{businessNameHome.instance.businessNameTextArea}"/>

            </s:decorate>

提交页面后,系统会解析输入的值并将其拆分为字符串列表

      public String checkBusinessNames(){

            String businessNameTextArea = this.getInstance().getbusinessNameTextArea();

            String[] businessNameTextAreaArray = businessNameTextArea.split("\\n");



            List<SelectItem> businessNameChoices = new ArrayList<SelectItem>();



            for(String businessNameText: businessNameTextAreaArray){           

                businessNameChoices.add(new SelectItem(businessNameText));

            }



            this.getInstance().setBusinessNameChoices(businessNameChoices);

            return "valid";

      }

然后要求用户从有效的商业名称列表中进行选择以注册

<s:decorate id="businessNameRegisterListField" template="layout/edit.xhtml">

 <ui:define name="label">Business Name</ui:define>

 <h:selectManyCheckbox  value="#{businessNameHome.instance.selectedbusinessName}" layout="pageDirection" immediate="true" >

 <s:selectItems value="#{businessNameHome.instance.businessNameChoices}" var="bn" label="#{bn.label}" />                                                                                      </h:selectManyCheckbox>                            

  </s:decorate>

selectedbusinessName的类型为String,而businessNameChoices的类型为List

提交页面后,提交的商家名称是这样的:

javax.faces.model.SelectItem@135aa7c

我已尝试将itemValue放在s:selectItems上,但我收到另一个错误,即“值无效”

尝试使用<s:convertEntity>但获取NumberFormatException

我也尝试创建自己的转换器

公共类BusinessNameBeanConverter实现javax.faces.convert.Converter {

        @Override

        public Object getAsObject(FacesContext context, UIComponent cmp, String value)      {

            // TODO Auto-generated method stub

            System.out.println("getAsObject "+value);

            return value;

        }



        @Override

        public String getAsString(FacesContext context, UIComponent cmp, Object value) {

            // TODO Auto-generated method stub

            System.out.println("getAsString "+((SelectItem)value).getValue());

            return ((SelectItem)value).getValue();

        }



    }

但我仍然得到相同的“值无效”错误。

我不知道该怎么办了。请帮忙。

谢谢,

尼古拉斯

1 个答案:

答案 0 :(得分:3)

更改

<s:selectItems value="#{businessNameHome.instance.businessNameChoices}" var="bn" label="#{bn.label}" />

<f:selectItems value="#{businessNameHome.instance.businessNameChoices}" />

您已经是List<SelectItem>,而不是List<SomeObject><s:selectItems>非常有用。

不要忘记删除转换器,这没有任何意义。