2

У меня есть составной компонент, представляющий таблицу, которая в зависимости от атрибута editable (который я создал) может отображать или не отображать ссылки для редактирования строки.Метод Action/ActionListener проверен, даже если rendered = false

Редактирование ссылок относится к типу <h:commandLink> и содержит actionListener с указанием метода в фоновом режиме. Бэк-файл для обработки редактирования предоставляется как <cc:attribute name="editBean"... />, как и атрибут editable, когда я хочу, чтобы таблица была доступна для редактирования.

Если мне не нужна таблица для редактирования, я устанавливаю атрибут editable в значение false, а атрибут rendered присваивается значение false.

Моя проблема заключается в том, что, если я изложу editable к false и поэтому не установлен атрибут editBean либо, я получаю ошибки, указывающие на то, что не существует способа обработки редактирования (например, java.lang.String не обладает свойством ххххх).

Я надеялся, что, поскольку ссылки настроены так, чтобы не отображаться вообще, то, что было указано в action/actionListener, будет проигнорировано. Для меня логично сначала проверить атрибут rendered, а затем, если он установлен на true, проверьте остальные атрибуты.

Итак, мои вопросы: почему это работает так, и если есть элегантный способ справиться с этим сценарием?

ответ

2

Использование JSTL <c:if> условно построить компонент в дереве компонентов JSF вместо rendered атрибута условно вынести вывод HTML (это то, что вы используете JSF 2.2, в противном случае я бы явно отметил, что для этого требуется как минимум Mojarra 2.1.18, чтобы избежать разбитого состояния просмотра).

<c:if test="#{cc.attrs.editable}"> 
    <h:commandLink ... /> 
</c:if> 
+0

Спасибо! Это сработало – nivis

+0

Добро пожаловать. – BalusC

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