我在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();
}
}
但我仍然得到相同的“值无效”错误。
我不知道该怎么办了。请帮忙。
谢谢,
尼古拉斯
答案 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>
非常有用。
不要忘记删除转换器,这没有任何意义。