저는 JSF/Facelets에 익숙하지 않고 ui : repeat 컴포넌트 내에서 컨텐츠를 렌더링할지 여부를 결정할 때 로직 배치에 가장 적합한 위치를 이해하려고합니다.JSF를 사용하여 상태로 로직 수행하기 ui : repeat 루프
내 백킹 빈에는 각각 날짜가 포함 된 메시지 목록이 있습니다. 모든 메시지를 인쇄하려고하지만 변경된 날짜 만 렌더링합니다.
현재 backing bean getter 메소드가 backing bean 내의 로직 및 설정 상태를 기반으로 메시지 날짜를 렌더링할지 여부를 결정하는 아래 항목이 있습니다. JSF는 여러 번 실제로 getter 메소드에 더 복잡성을 추가하는 렌더링하기 전에 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>
이 버그와 끔찍한 코드는 무엇인가 렌더링 여부를해야하는지 여부 이외의 아무것도 할 수 없다 UI에 실제로 있어야하며 getter 메소드는 간단한 속성을 반환하는 것이 좋지만 반면에 getter 메서드에는 불쾌한 논리가 많이 있습니다.
나는 UI가 어떻게 든 마지막으로 렌더링 된 날짜의 상태를 저장하고 렌더링하는 것과 비교해야한다고 생각하지만 그게 맞는지는 확실하지 않습니다.
나는 이것이 드문 문제라고 생각하지 않습니다. 이 문제를 해결하는 좀 더 우아한 해결책이 있는지 아는 사람 있습니까?
메시지를 다음과 같이
UI 계층
해주기 단순화된다. 항상 렌더링되지만 런타임에 List의 다른 메시지와 관련하여 순전히 렌더링 될 수도 있고 그렇지 않을 수도있는 속성 (날짜)을가집니다. 나는 이것이 메시지 객체에 존재해야한다고 생각하지 않는다. 왜냐하면 이것은 UI 객체이고 메시지는 다른 메시지에 대한 지식이 없기 때문이다. 이 질문은 반복 내의 개체 상태를 관리하는 문제와 해당 상태를 관리하는 방법과 관련됩니다. –아마도 JSF는 마지막으로 렌더링 된 날짜를 설정하는 backing 빈에서 <:c:set... >을 호출해야합니다. 이것이 좋은 연습인지 아닌지 확실하지 않거나 느껴지지 않습니다. –