我越来越“值不是一个有效的选择”为SelectManyCheckBox
我在JSP页面中有这样的代码:我越来越“值不是一个有效的选择”为SelectManyCheckBox
<h:selectManyCheckbox id="chb" value="#{MyBean.selectedCheckBoxes}" layout="pageDirection">
<f:selectItems value="#{MyBean.checkBoxItems}"/>
</h:selectManyCheckbox>
而且在我为myBean:
public class MyBean {
public MyBean() {
for (Elem section : sections) {
checkBoxItems.put(section.getName(), section.getObjectID());
}
}
private String[] selectedCheckBoxes;
private Map<String, Object> checkBoxItems = new LinkedHashMap<String, Object>();
public String save() {
//save is not being executed....
return FORWARD;
}
public Map<String, Object> getCheckBoxItems() {
return checkBoxItems;
}
public void setCheckBoxItems(Map<String, Object> checkBoxItems) {
this.checkBoxItems = checkBoxItems;
}
public String[] getSelectedCheckBoxes() {
return selectedCheckBoxes;
}
public void setSelectedCheckBoxes(String[] selectedCheckBoxes) {
this.selectedCheckBoxes = selectedCheckBoxes;
}
}
当我点击保存给出以下消息<t:message for="chb"/>
“chb”:值不是有效的选项。
即使我没有为h:selectManyCheckbox
添加required
属性,它正试图验证或做别的事情...... 我已经改变了checkBoxItems
可变型(带的getter/setter方法)来List<SelectItem>
,但它不是很好。 可能是什么原因,我该如何解决?
PS:我正在使用JSF 1.1
您将收到此错误时,所选项目的equals()
测试有不为可用项目的任何返回true
。所以,当大致有以下几种下JSF的覆盖情况:
boolean valid = false;
for (Object availableItem : availableItems) {
if (selectedItem.equals(availableItem)) {
valid = true;
break;
}
}
if (!valid) {
// Validation error: Value is not valid!
}
,可以在您的特定情况下,仅意味着section.getObjectID()
不返回String
这是你的selectedCheckboxes
声明,但不同类型或自定义类型其中equals()
未实施或损坏。
更新按你的意见中,getObjectID()
回报Integer
。因此被视为String
,因为selectedCheckBoxes
被宣布为String[]
。你应该更改以下
private String[] selectedCheckBoxes;
private Map<String, Object> checkBoxItems = new LinkedHashMap<String, Object>();
到
private Integer[] selectedCheckBoxes;
private Map<String, Integer> checkBoxItems = new LinkedHashMap<String, Integer>();
,也许(不知道,不能从头顶告诉现在)还明确提供一个转换器:
<h:selectManyCheckbox ... converter="javax.faces.Integer">
我没有发现任何问题的代码,我认为有问题列表你传递给oneManyCheckBox。
硬编码一些值列表中的getter比检查
public Map<String, Object> getCheckBoxItems() {
checkBoxItems.clear();
checkBoxItems.put("aaaa", "aaaa");
checkBoxItems.put("bbbb", "bbbb");
checkBoxItems.put("cccc", "cccc");
checkBoxItems.put("dddd", "dddd");
checkBoxItems.put("eeee", "eeee");
return checkBoxItems;
}
谢谢!所有复选框都在UI中呈现,值正在传递给'checkBoxItems' .... – 2012-04-28 12:00:07
谢谢Mr. Bauke。在我的案例中'section.getObjectID()'返回'Integer'。我应该使用自定义类型来实现'equals()'....我将代码更改为Java端:http://pastebin.com/jxnFGDQZ,这是我的JSP文件http:/ /pastebin.com/7T2yzP55。不过,仍然是相同的消息... – 2012-04-28 13:36:24
不,“整数”是好的。你应该只提供一个转换器。我会更新答案。 – BalusC 2012-04-28 13:42:52
非常感谢先生...你太棒了!!! – 2012-04-28 13:55:49