javax.el.PropertyNotFoundException при попытке разрешить логические свойства в EL

У меня есть следующий класс дерева узла:

public abstract class DocumentTreeNode extends TreeNodeImpl implements javax.swing.tree.TreeNode
{
    private Boolean isToC;

    ...

    public Boolean isToC()
    {
        return isToC;
    }

    public void setToC(Boolean isToC)
    {
        this.isToC = isToC;
    }

}

Это простой флажок, указывающий, должен ли документ быть включен во что-либо или нет. Однако при попытке сослаться на это изнутри JSF 2 EL

...
<h:selectBooleanCheckbox value="#{node.isToC}" />
...

Я получаю исключение:

Вызвано: javax.el.PropertyNotFoundException: /main.xhtml @541,64 value="#{node.isToC}": класс 'ChapterTreeNode' не имеет свойства 'isToC'.

(Я думаю, что попробовал почти каждую комбинацию, по крайней мере, я чувствовал себя так;;-))

Как мне разрешить это логическое свойство? Что нужно изменить?

1 ответ

Решение

Вы не должны указывать имя метода, а только имя свойства. Вы должны опустить is (а также get а также set) префикс при указании свойств бина.

<h:selectBooleanCheckbox value="#{node.toC}" />

EL просто автоматически использует соответствующий метод получения / установки для свойства (обратите внимание, что это действительно означает, что физическое присутствие переменной экземпляра не является необходимым). Исключение, которое вы получили,

Вызвано: javax.el.PropertyNotFoundException: /main.xhtml @541,64 value="#{node.isToC}": класс 'ChapterTreeNode' не имеет свойства 'isToC'.

в основном означает, что нет такого метода, как isIsToc() или же getIsToc() (и это правильно).

Ваша вторая проблема в том, что вы использовали Boolean вместо boolean, Затем вы должны действительно вызвать метод getToC() или же getIsToC() вместо isToC(), В последнем случае вы можете просто продолжать использовать #{node.isToC},

Смотрите также:

Другие вопросы по тегам