Подтвердить что ты не робот

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

У меня есть следующее дерево node class:

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.

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

См. также: