javax.el.PropertyNotFoundException при попытке разрешить логические свойства в EL - PullRequest
13 голосов
/ 16 сентября 2011

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

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'.

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

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

1 Ответ

22 голосов
/ 16 сентября 2011

Не следует указывать имя метода, а только имя свойства.При указании свойств bean-компонента необходимо пропустить префикс isget и 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}.

См. Также:

...