Я довольно новичок в JSF/Facelets и стараюсь понять, где лучше всего поставить логику при принятии решения о том, нужно ли отображать контент в компоненте ui: repeat.Выполнение логики с состоянием с JSF ui: цикл повторения
В моем bean-компоненте у меня есть список сообщений, каждый из которых содержит дату. Я хочу распечатать все сообщения, но только отображать дату, когда она изменяется.
В настоящее время у меня есть что-то вроде ниже, где метод geting bean getter определяет, следует ли отображать дату сообщения на основе логики и состояния настройки в бэкэнде.
<ui:repeat value="#{bean.orderedMessages}" var="message" varStatus="messageLoop">
<h:panelGroup rendered="#{bean.isDateRendered(messageLoop.index)}">
#{message.formattedDate}
</h:panelGroup>
// some other stuff for each message
</ui:repeat>
Это плохо и ужасно, так как JSF вызывает метод геттера много раз, прежде чем на самом деле рендеринг, который добавляет дополнительную сложность методы газопоглотительной, код не имеет ничего общего с ничего, кроме должно ли быть оказано что-то или нет который действительно должен находиться в пользовательском интерфейсе, а метод getter имеет целую кучу неприятной логики, тогда как я бы предпочел вернуть простое свойство.
Я считаю, что пользовательский интерфейс должен каким-то образом сохранить состояние последней визуализированной даты и сравнить его с тем, что он собирается отобразить, но я не уверен, правильно ли это.
Я не верю, что это необычная проблема. Кто-нибудь знает, есть ли более элегантное решение для решения этого?
сообщение в данном случае является объектом заполняется из базы данных. Он всегда будет отображаться, но имеет свойство (дату), которое может или не может быть передано исключительно по отношению к другим сообщениям в Списке во время выполнения. Я не думаю, что логика должна существовать в объекте сообщения, так как это пользовательский интерфейс, и сообщение также не знает других сообщений. Этот вопрос связан с проблемой управления состоянием объектов в рамках повтора и как управлять этим состоянием. –
Возможно, JSF должен вызвать <:c:set... > на настройке бэкэнда последней даты визуализации. Не уверен, что это хорошая практика или нет, поскольку это не похоже на это. –