2013-03-13 1 views
0

내 코드 :PrimeFaces 소켓은 어떻게 작동합니까?

<p:socket channel="/allposts/#{uview.user.uid}"> 
<p:ajax event="message" async="true" listener="#{uview.go}" update="xout"/> 
</p:socket> 

# 1. uview는 뷰 범위 bean을 참조합니다. 업데이트를 포함한 모든 작업은 리스너 메서드를 제외하고 작동합니다. 리스너 메소드가 호출되지 않습니다. 리스너의 값을 존재하지 않는 메소드로 변경하더라도 오류를보고하지 않습니다. 왜 그것이 작동하지 않는가?

[동적 ID를 포함] 나는 다음과 같은 코드에 주목 또 한가지 : 여기

<p:socket channel="/allposts/#{uview.user.uid}"> 
<p:ajax event="message" async="true" listener="#{uview.go}" update="#{uview.user.uid}"/> 
</p:socket> 

는, 그것이 지정된 ID를 [와 ID를 찾을 수 없다는 오류가 오류가있는 ID를 보여줍니다보고 메시지]. 이드가있는 요소가 있더라도 찾을 수 없습니다. 확실히 컨테이너 참조 문제의 이름을 지정하지 않습니다.

[동적 부분]이 JSF &에 의해 렌더링되기 전에도 Primeface 소켓이 초기화되므로 동적 ID를 찾을 수 없습니다.

# 2. Pimeface Demo 페이지에서 알 수 있듯이 JSF에서 채팅 애플리케이션을 구현하려면 동적 ID로 요소를 업데이트해야합니다. primeface 소켓을 구현하는 데 내가 잘못 되었나요? 좀 더 우아하게 구현할 수있는 다른 방법이 있습니까?

+0

안녕, 당신이에 대한 해결 방법을 찾았나요? 나는 똑같은 문제가있다. – alex

답변

4

uview는보기 빈을 범위를 말합니다. 업데이트를 포함한 모든 작업은 리스너 메서드를 제외하고 작동합니다. 리스너 메소드가 호출되지 않습니다. 리스너의 값을 존재하지 않는 메소드로 변경하더라도 오류를보고하지 않습니다. 왜 그것이 작동하지 않는가?

그것은 버그입니다. 나는 다음과 같은 해결 방법을 찾을 :이

<p:socket channel="/channel"> 
    <p:ajax event="message" 
      listener="#{controller.yourListenerMethod}" 
      update=":form:table" /> 
</p:socket> 

같은 코드로 대체 :

<p:socket onMessage="handleMessage" channel="/channel" /> 
<script type="text/javascript"> 
    function handleMessage(data) { 
     updateWidgets(); 
    } 
</script> 

<p:remoteCommand name="updateWidgets" 
       actionListener="#{controller.yourListenerMethod}" 
       update=":form:table" />