У меня есть таблица данных с 17 атрибутами. Таблица может отображаться в двух режимах: с включенным выделением строк и без него.
<p:dataTable selection = "#{isDefaultSelectionMode ? null : widget.selected}" />
Это не работает, потому что selection
ожидает, что ссылка на свойство сможет установить/получить его.
Я могу создать фиктивное свойство widget.ignored
, и оно сработает. Мне это не нравится по понятной причине.
<p:dataTable selection = "#{isDefaultSelectionMode ? widget.ignored : widget.selected}" />
Я мог бы разделить таблицу на два отдельных шаблона. Я бы исключил selection
из одного и продублировал 16 других атрибутов. Это тоже нехорошо.
Я ищу элегантное решение, чтобы либо сделать атрибут необязательным (не отображать его при некоторых условиях), либо избежать определения фиктивного свойства.
Я новичок в JSF и PrimeFaces, не стесняйтесь исправлять. Любая помощь будет приветствоваться.
Это не только что о пользовательских атрибутах. Это касается и атрибутов динамичный. Попробуйте, если это сработает, может и нет, но может быть... Мне это никогда не было нужно и сейчас нет времени пробовать. stackoverflow.com/questions/18231951/…
Но затем в сочетании с c:if
вокруг него... stackoverflow.com/questions/33474926/…
Правильно, поэтому я удалил это и просто сослался на c:if, как в упомянутом вопросе)
Вы можете создать ответ самостоятельно, если хотите, просто обратитесь к другим вопросам и ответам, и я проголосую за ваш ;-)
К счастью, мне не пришлось применять какие-либо из моих ужасных обходных путей.
Как было предложено @Kukeltje (спасибо) и предоставленным им ссылкам, я определил атрибут условно
<c:if test = "#{isDefaultSelectionMode}">
<f:attribute name = "selection" value = "#{widget.selected}"/>
</c:if>
Для получения более подробной информации посетите эти вопросы:
Что-то вроде этого: stackoverflow.com/questions/5712364/… ?