<h:commandScript>
은 다음과 같이 사용할 수 있습니다. spec issue 613도 참조하십시오.
<h:form>
<h:commandScript name="foo" action="#{bean.action}" render="div-to-render" />
</h:form>
function clickAndRender() {
foo();
}
그것은 Mojarra 2.3.0-m06부터 사용할 수
.
이 답변은 질문이 게시 된 후 3 년 후에 업데이트되었습니다. 아래는 원래 답이 <h:commandScript>
이 존재하지 않았던 때입니다.
I have no idea what the values of the 'source' parameter (the code above uses 'this') should be
그것은 당신이하고 싶은 UICommand
구성 요소의 클라이언트 ID가 호출하는 것, 예를 들어, <h:commandLink>
, <h:commandButton>
등 표준 JSF API에 의해 제공됩니다. JSF는 요청 값을 적용하는 동안 구성 요소 트리에서 원하는 구성 요소를 찾은 다음 등록 된 모든 동작 (수신기)을 대기열에 넣을 수 있습니다.
neither do I know what execute in the last parameter should be set to.
그것은 양식 제출을하는 동안 처리하고자하는 구성 요소의 공백으로 구분 된 클라이언트 ID이어야한다. <f:ajax execute>
에서 일반적으로 사용하는 것과 정확히 같습니다.
I also don't know how to define the url to be called
그냥 현재 페이지에서 UICommand
구성 요소가 중첩되어있는 <h:form>
에 의해 생성 된 된 <form>
에서 유래.하지만 jsf.ajax.request()
에 지정할 필요가 없습니다로. jsf.js
은 이미 UICommand
구성 요소의 클라이언트 ID를 기반으로 결정합니다.
and the 'action' method.
그냥 일반적인 방법으로 대상
UICommand
구성 요소의
action
또는
actionListener
속성을 지정합니다.
모든 모든, 당신의 구체적인 문제는 당신이보기에서 UICommand
구성 요소가없는, 그래서 당신은 jsf.ajax.request()
을 사용할 수 없다는 것입니다. 한 가지 방법은 CSS display:none
으로 숨겨져 명령 구성 요소와 형태를 가지고하는 것입니다 :
<h:form id="foo" style="display:none">
<h:commandLink id="bar" action="#{bean.method}" />
</h:form>
는 그런 다음
source
매개 변수로
foo:bar
를 사용할 수 있습니다.
jsf.ajax.request('foo:bar', null, {'javax.faces.behavior.event': 'action', 'execute': '@form', 'render': 'div-to-render'});
위의 내용은 명령 구성 요소에서 <f:ajax execute="@form" render="div-to-render">
과 실질적으로 동일합니다. 또는이 경로를 사용하여 jsf.ajax.request()
대신 document.getElementById("foo:bar").click()
을 사용할 수도 있습니다.
또는 UICommand
사용자 정의 구성 요소를 만들면 JavaScript 사용자가 좀 더 쉽게 사용할 수 있습니다. JSF 유틸리티 라이브러리 OmniFaces에는 이러한 구성 요소 인 <o:commandScript>
이 있습니다. 그것의 showcase page 및 source code을보십시오. JSF 컴포넌트 라이브러리 PrimeFaces도 flavor에서 유사한 컴포넌트를 <p:remoteCommand>
으로 사용합니다. 그것의 showcase page을 또한보십시오. RichFaces은 동일한 것을하는 <a4j:jsFunction>
을 가지고 있습니다. 그것의 showcase page을 또한보십시오.
아쉽게도 작동하지 않습니다.uncaught clientError : 요소가 폼에 첨부되어 있지 않거나 같은 식별자 나 이름의 명명 된 요소가있는 폼이 여러 개 있기 때문에 Sourceform을 확인할 수 없습니다. 아약스 처리를 중지합니다. jsf.js : 8352 _MF_SINGLTN._getForm의 jsf.js : 8352 _MF_SINGLTN.request jsf.js : 8264 요청 jsf.js : 8947 가 온 클릭 을 signatureClicked 내가 명시 적으로 jsf.ajax.request 호출로 접근을 시도했다. – wujek
$ ("# foo \\ : bar")와 작동합니다. click() (저는 jquery를 사용하고 있습니다). 시간이 있다면 첫 번째 접근법에 무엇이 잘못되었는지 배우고 싶습니다. 그리고 당신의 도움에 감사드립니다! – wujek
반갑습니다. 초기 문제에 관해서는 RichFaces 명령 구성 요소를 사용하고있는 것처럼 보입니다.이 오류 메시지는 RichFaces에만 해당됩니다. 죄송합니다. SSCCE를 보지 않고는 그 부분에 대답 할 수 없습니다. 그 추악한 jsf.ajax.request 나 jQuery를 사용하지 않고 그냥' '을 사용해야한다고 말할 수 있습니다 :) –
BalusC