2012-04-30 2 views
9

안녕하세요 조건부 내 페이지의 구성 요소를 렌더링하는 코드가 : 그것은 답을 얻고 구성 요소를 렌더링조건부 렌더링은

<h:commandButton action="#{Bean.method()}" value="Submit"> 
    <f:ajax execute="something" render="one two" /> 
</h:commandButton> 

<p><h:outputFormat rendered="#{Bean.answer=='one'}" id="one" value="#{messages.one}"/></p> 
<p><h:outputFormat rendered="#{Bean.answer=='two'}" id="two" value="#{messages.two}"/></p> 

하지만 내 페이지를보기 위해를, 나는 새로 고침 할 필요가 페이지. 이 문제를 어떻게 해결할 수 있습니까? 어떤 제안?

답변

14

JSF 컴포넌트의 rendered 속성은 JSF가 원하는 HTML을 생성할지 여부를 제어하는 ​​서버 측 설정입니다.

<f:ajax> 태그의 render 속성은 자바 스크립트 아약스 요청의 완료에 그 내용을 대체하기 위해 HTML DOM 트리에서 document.getElementById()로 드실 수 JSF 생성 된 HTML 요소의 (상대적) 클라이언트 ID를 가리켜 야합니다.

그러나 JSF (renderedfalse)로 렌더링되지 않는 HTML 요소의 클라이언트 ID를 지정하므로 JavaScript는 HTML DOM 트리에서 해당 요소를 찾을 수 없습니다.

당신은 항상 렌더링하는 컨테이너 요소에 포장하고 HTML DOM 트리에 따라서 항상 가능합니다. 구체적인 문제에


관련없는

<h:commandButton action="#{Bean.method()}" value="Submit"> 
    <f:ajax execute="something" render="messages" /> 
</h:commandButton> 

<p> 
    <h:panelGroup id="messages"> 
     <h:outputFormat rendered="#{Bean.answer=='one'}" value="#{messages.one}"/> 
     <h:outputFormat rendered="#{Bean.answer=='two'}" value="#{messages.two}"/> 
    </h:panelGroup> 
</p> 

, 당신은 가능한 디자인 실수를가했습니다. ,

<h:commandButton action="#{Bean.method()}" value="Submit"> 
    <f:ajax execute="something" render="message" /> 
</h:commandButton> 

<p> 
    <h:outputFormat id="message" value="#{Bean.message}" /> 
</p> 
+0

답장을 보내 주셔서 감사합니다. 내가 한 일은 render = "@ form"을 폼에 사용했다는 것입니다. 나는 당신이 제안한 것을 시도 할 것입니다. – sandra

+0

그것은 항상 작동합니다 (구성 요소의 부모가 항상 * 렌더링 됨). 정확하게 (정확하게 내 대답이 당신에게 말하려고하는 것처럼). 양식에 예를 들어 전혀 업데이트 할 필요가없는 10 개의 다른 구성 요소가 포함되어있는 경우 불필요한 오버 헤드가있을 수 있습니다. – BalusC

+0

아약스 렌더링에 조건을 추가 할 수 있습니까? –

-1
style="visibility: #{questionchoose.show==false ? 'hidden' : 'visible'}" 
+0

항목을 표시하지 않고 항목을 렌더링하는 것이 좋습니다. – dwjohnston

3

를 내가이 질문의 중심점하지 알고 : 왜 당신은 그냥 사용할 수 있도록, 대신 액션 메소드에서 원하는 메시지와 함께 세트 #{Bean.message} 속성을 만들 것 그러나 과거에이 문제가 여러 번 있었기 때문에 나는 어려움에 처한 다른 사람들을 돕기 위해 여기에 게시합니다. PrimeFaces를 사용하는 사람들은 PrimeFaces Extension에 Switch이라는 구성 요소가 있습니다.

값에 따라 다른 출력 또는 구성 요소를 표시해야하는 경우가 있습니다. 일반적으로 ui:fragment 태그를 사용하여이 작업을 수행 할 수 있습니다. pe:switch 유틸리티 태그를 사용하면 ui:fragment rendered="#{!empty someController.value}"과 같은 다른 검사를 사용하여 ui:fragment 태그를 선언 할 필요가 없습니다.

관련 문제