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}
,