2012-05-20 4 views
1

연습 할 때 사용자가 로그인 할 때까지 사용할 수없는 메뉴 모음을 사용하고 싶습니다. 사용자가 로그인하면 업데이트를 트리거 할 항목을 호출하려고합니다. 메뉴 바는 master.xhtml 템플릿 파일에호출 템플릿의 메뉴 막대를 업데이트하는 방법

내가 masterMenuBar 내 정의 된 라벨에 상황에 맞는 업데이트를 호출 내 행운을 시도

public void refreshForm() { 
    RequestContext context = RequestContext.getCurrentInstance(); 
    context.update("form1"); 
    context.update("masterMenuBar"); 
} 

양식을 새로 고치 코드가 로그인의 일환으로

<h:form > 
    <p:menubar id="masterMenuBar"> 
    <p:menuitem disabled="#{backing.disableMenu}" value="List users" /> 
    </p:menubar> 
</h:form> 

그러나 RequestContext에는 분명히 내 전화 템플릿 양식이 포함되어 있지 않습니다.

내 메뉴 막대에 컨텍스트 업데이트를 포함 할 수있는 다른 컨텍스트가 있습니까? 아마도 나는 잘못된 길을 가고 있습니다. 그리고 같은 것을 성취하기위한 더 좋은 방법이 있습니까?

브라우저 크기를 조정해도 콩을 다시 호출하는 데 충분하지 않은 것을 알았습니다. backing.disableMenu 콩. 분명히 두 번째 콩에 내 콩이 도달하게하려면 상당히 강한 것을 필요로합니다.

답변

2

상대 클라이언트 ID가 아닌 절대 클라이언트 ID를 전달해야합니다. 브라우저에서 마우스 오른쪽 버튼을 클릭하고 소스를 보면 masterMenuBar 요소의 접두어가 붙은 양식의 (자동 생성 된) ID가 있음을 알 수 있습니다.

당신은 메뉴가 고정 된 ID

<h:form id="menuForm"> 
    <p:menubar id="masterMenuBar"> 
     ... 

에 앉아 양식을 포기하고 대신에 절대 클라이언트 ID를 전달해야합니다.

context.update("menuForm:masterMenuBar"); 

업데이트 : 죄송합니다, 그것은 <p:commandButton>update 속성에 반하는 :로 시작해서는 안된다.

+0

나는 당신을 혼란스럽게 만들었습니다. 두 개의 양식이 있습니다. 하나는 마스터 템플리트이고 다른 하나는 welcome.xhtml 파일입니다. welecome 사람은 id = "form1"을 가지고 있습니다. 그러나, 만약 내가해야 할 일은 context.update (": masterMenuBar")입니다. 나는 그것을 시도 할 것이다. –

+0

양식 안에있는 경우에도 작동하지 않습니다. 절대 클라이언트 ID는': form1 : masterMenuBar'가되어야합니다. 생성 된 HTML 출력을 확인하십시오. 그런데 얼마나 많은 템플릿/당신이 사용하는지는 중요하지 않습니다. 단지 하나의 UIViewRoot가 있습니다. – BalusC

+0

귀하의 조언에 감사드립니다. 나는 내가 생각할 수있는 모든 것을 시도해 왔지만 한번 이상 내 브레이크 포인트에 부딪치게 할 수는 없다.

를 사용하지 않으려 고 생각했기 때문에 id =를 한 줄 위로 이동했습니다. 그것은 아무런 효과가 없었습니다. 내가 조합을 시도 : masterMenuBar, 마스터 : masterMenuBar 및 : 마스터 : masterMenuBar 아무것도 작동하지 않습니다. 중단 점에 한 번만 도달합니다. –

관련 문제