Мой код здесь выполняет итерации столбцов для каждой строки, а атрибут rendered
вычисляется на каждую итерацию, перевыполняя testRule
.Как установить переменную в JSF?
<p:dataTable ...>
<p:column ...>
...
</p:column>
<p:column rendered="#{managedBean.testRule('rules.canDoActions')}">
<!-- Action buttons -->
<h:commandButton ...>
<h:commandButton ...>
</p:column>
</p:dataTable>
Чтобы получить более высокую производительность, мне было интересно, чтобы установить результат в переменную, но я не знаю, как ... Это стало бы что-то вроде этого:
<?:??? var="canDoActions" value="#{managedBean.testRule('rules.canDoActions')}">
<p:dataTable ...>
<p:column ...>
...
</p:column>
<p:column rendered="#{canDoActions}">
<!-- Action buttons -->
<h:commandButton ...>
<h:commandButton ...>
</p:column>
</p:dataTable>
Кроме того, я 'm не разрешено использовать Библиотека тегов ядра, что означает, что <c:set ../>
не может быть и речи.
В этой области действия, как я могу установить переменную? Или, если это невозможно, что вы предлагаете решить?
Почему не вы "разрешено" использовать JSTL ядра TagLib? – BalusC
@BalusC: Архитектор решил не использовать JSTL с JSF, потому что (если я не ошибаюсь) он работает в другой фазе других тегов, и люди здесь использовали его безрассудно, смешивая вещи, и появилось много ошибок и заметок (если Я не ошибаюсь, ядро JSTL не переименовано в вызовы ajax). JSTL был создан для JSP, и он был логически разработан для него. Я знаю, что его можно использовать с JSF, но здесь архитектор решил, что использование JSTL не будет лучшей практикой. Несмотря на то, что мы жертвовали JSTL, наши проблемы были решены (верьте, JSTL не так уж и необходимо). Рад поговорить с тобой, @BalusC! – falsarella
JSTL действительно не обязательно необходим. Но это может быть полезно, если вы хотите динамически создавать представление. См. Также http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense. Хотя ваш архитектор определенно имеет правильную точку (это действительно часто путается для начинающих), но полностью ограничивая его, он немного переусердствует , Ну, '' будет ответом на ваш вопрос. Если это не вариант (или выявляет другие проблемы, это не очень хорошо сочетается с просмотром фасоли, например), то вы должны кэшировать себя в getter. См. Ответ Джигара. –
BalusC