2012-04-28 3 views
0

У меня есть этот код на моей странице 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": Недействительный параметр.

Несмотря на то, что я не добавить атрибут required для h:selectManyCheckbox, он пытается подтвердить или делать что-то другое ... я изменил checkBoxItems тип переменной (с геттер/сеттеры) в List<SelectItem>, но он не работает. Что может быть причиной, как я могу ее решить?
PS: Я использую JSF 1.1

ответ

3

Вы получите эту ошибку, когда тест на выбранном элементе 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() не реализован или не сломан.


Update согласно вашему комментарию, 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"> 
+0

Спасибо, мистер Бауке. В моем случае' section.getObjectID() 'возвращает' Integer'. Должен ли я работать с настраиваемыми типами, где я могу реализовать 'equals()' .... Я изменил свой код на здесь, это сторона Java: http: //pastebin.com/jxnFGDQZ, и это мой JSP-файл http://pastebin.com/7T2yzP55. Однако все же одно и то же сообщение ... –

+0

Нет, 'Integer' в порядке. Вы должны подавать только конвертер. Я обновлю ответ. – BalusC

+0

Большое спасибо, сэр ...ты обалденный!!! –

0

Я не нашел проблемы в коде, я думал, что есть проблема, которую вы перечислили в oneManyCheckBox.

жёстко некоторые значения в списке в поглотителе, чем проверить

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; 
    } 
+0

Спасибо! Все флажки отображаются в пользовательском интерфейсе, и значения передаются в 'checkBoxItems' правильно .... –

Смежные вопросы