2012-12-10 2 views
2

JS 값을 구성 요소 내부의 중첩 된 특성 태그에 전달하는 방법은 무엇입니까?JSF 속성 태그의 값

<p:remoteCommand .....> 
    <f:attribute name="galaxie" value="jstest()" /> 
</p:remoteCommand> 

그리고 내 간단한 JS jstest 기능 :

function jstest(){ 
    return "foo"; 
} 

나는 콩을 백업에서의 Galaxie에 대한 속성 값을 테스트 나는 jstest()하지 foo

나는이 코드를 가지고있다.

+0

구성 요소의 특성은 클라이언트 수준이 아니라 서버 수준에서 선언되고 설정됩니다. 즉, 이런 방식으로 서버 측 구성 요소 속성에 클라이언트 측 값을 제출하지 않습니다. 아마 달성하기위한 더 좋은 방법이 있기 때문에 구체적으로 달성하려는 것은 무엇입니까? –

+0

감사합니다. 예. 생각했습니다 ... –

답변

5

<f:attribute>은 HTML 코드를 생성하는 동안 웹 서버에서 실행되는 JSF 태그입니다. JavaScript는 웹 서버에서는 실행되지 않지만 JSF에서 생성 한 모든 HTML 코드를 검색 한 후 웹 브라우저에서 실행되는 클라이언트 측 언어입니다. 그러나 당신은 그들이 "동행"한다고 생각하는 것 같습니다. 이것은 사실이 아닙니다.

염두에 두었던 것을 달성하려면 기본적으로 콩 속성에 바인딩 된 <h:inputHidden>을 제공해야하며 JS가 원격 명령 요청이 시작되기 전에 채우도록해야합니다.

예.

<h:form id="form"> 
    <h:inputHidden id="galaxie" value="#{bean.galaxie}" /> 
    <p:remoteCommand ... onstart="$('#form\\:galaxie').val(jstest())" process="@form" ... /> 
</h:form> 

또는 요청 매개 변수 맵을 나타내는 JS 객체를 받아들이는 원격 명령 함수 인수로 전달하는 것이 훨씬 쉽습니다. 주어진

<h:form> 
    <p:remoteCommand name="foo" ... /> 
</h:form> 

당신이 단지 수 :

foo({ galaxie: jstest() }); 

당신은 @ManagedProperty 또는 ExternalContext#getRequestParameterMap()하여 수집 할 수 있습니다.


업데이트는 : PrimeFaces 3.3 이후, <p:remoteCommand> 기능의 매개 변수에 대한 구문이 변경되었습니다. 당신이 적어도 PrimeFaces 3.3을 사용하는 경우, 다음 함수 호출은 다음과 같아야합니다

foo([{ name: 'galaxie', value: jstest() }]); 

Pass parameter to p:remoteCommand from JavaScript를 참조하십시오.

+0

감사합니다.하지만 'foo'변수가 동적이고 HTML 생성에 알려지지 않았으므로 적용 할 수 없습니다. 기본적으로 HTML select 컴포넌트 (selectOneMenu)의 가치입니다. 그래서이 구성 요소의 onchange 리스너 덕분에 remoteCommand가 해고되고 내 backing bean의이 selectOneMenu 값을 알고 싶습니다. 요약하면, 나는 이것을하고 싶다 : http://www.primefaces.org/showcase/ui/pprPartialTree.jsf 그러나 remoteCommand와 함께하지만 그것은 작동하지 않는다 (그것은 포럼에 따라 많은 버그가있는 것처럼 보인다.). 그래서 저는 JS –

+0

을 통해 이것을하고 싶었습니다. 그런 다음 첫 번째로 언급 한 접근 방식으로 이동 하시겠습니까? – BalusC

+0

흠, 나는 너의 마음을 부분적으로 이해했다. 사실 나는이 "트릭"으로 내가 원하는 것을 할 수있다. 다시 감사합니다 ! –