의는 매우 간단 복합 구성 요소를 보자 : 그것을 위해JSF 2.0 : JSF 빈은 렌더링되지 않은 구성 요소에서 사용될 때 왜 생성됩니까?
<cc:implementation>
#{testBean.someField}
</cc:implementation>
콩 : 다음
public class TestBean {
private boolean someField = false;
public boolean getSomeField() { return someField; }
@PostConstruct
public void init() {
System.out.println("PostConstruct");
}
}
를 평소와 같이 호출하지만 표시되지 않습니다 :
은 어떻게됩니까<codeEditor:test rendered="#{false}" />
입니다 구성 요소가 결코 렌더링되지 않으며 bean은 가정 된대로 시작되지 않습니다. 우리가 같은 구성 요소를 변경하는 경우
그러나 :
<cc:implementation>
<h:outputText value="#{testBean.someField}" />
</cc:implementation>
무슨 일합니다 (rendered
속성이 false
때문에) 구성 요소가 여전히 렌더링 결코 극복 그러나, 빈이 인스턴스화 않는다는 것입니다. 이는 네이티브 JSF 컴포넌트 (h:panelGroup
, h:inputHidden
, 뭐든간에) 내부에서 bean 속성을 사용할 때 항상 발생합니다.
왜 그렇습니까?
감사합니다. BalusC, 나는 그것이 근본적이지만 정확히 무엇인지는 알지 못했습니다. 구성 요소와 콩을 사용하지 않을 때 생성하는 것이 좋지 않습니까? –
그래서이 문제를 해결할 수있는 유일한 방법은 복합 구성 요소 대신 UIComponents를 사용하는 것입니다. –
방금 해킹을 시도했습니다. 내용을 초기화할지 여부에 따라 0-1 요소가있는 ui : repeat를 사용하십시오. 컨텐츠를 생성해서는 안되는 경우 빈리스트를 리턴하고 컨텐츠가 작성되고 렌더링 될 때리스트 내에 하나의 더미 엘리먼트 (무엇이든)를 리턴하는 메소드를 생성했다. 그것은 구성 요소 트리를 조금 비싸지 만 적어도 기본적인 경우에는 작동해야합니다. –