2011-09-13 3 views
16

나는 다음과 같은 상황이 :Primefaces의 onclick 및 onsuccess는 차이

버튼을 클릭 한 후, 일부 비즈니스 로직을 수행하고이 완료된 후 보고서와 새 탭이 표시되어야합니다.

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.businesslogic}" 
       onstart="ajaxDialog.show();" 
       oncomplete="ajaxDialog.hide();" 
       onsuccess="window.open('./report.jsp', '_newtab');" /> 

이 작동하지 않습니다 :(

를 비즈니스 로직는 일부 밀리 초, 다음 작품 지속되면 :

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.fastbusinesslogic}" 
       onclick="window.open('./report.jsp', '_newtab');" /> 

온 클릭이 ONSTART 그것을하지만이 또한 것들처럼, 새 탭을 엽니을 onsuccess 또는 oncomplete와 함께 작동하지 않는 이유는 무엇입니까? 그리고 몇 초 동안 지속되는 비즈니스 논리에 대한 해결책이 있습니까?

+0

귀하의 질문을 뭔가를 할 수 onsuccess는와

이 혼란을 ... 몇 초 "? 서버 측 actionListener'businessLogic'가 완료된 후에'window.open ('./ report.jsp', '_newtab');'를 호출하기를 원하십니까? –

답변

7

PrimeFaces 명령에 대한 onsuccess n이 작동하지 않습니다. 그러나 oncomplete가 작동하고 내 비즈니스 로직에 오류가 있어도 내 경우에는 성공 대화 상자와 같은 오류가 있어도 필요한 작업을 수행합니다. onsuccess를 사용하려고했지만 작동하지 않습니다. 당신은 아래 onComplete를 시도 할 수 : 아약스 요청이 onComplete를하면서도 (순수 클라이언트 측)을 생성되고 서버가 아약스 요청에 응답 한 후 onsuccess는 실행하기 전에

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.businesslogic}" 
       onstart="ajaxDialog.show();" 
       oncomplete="ajaxDialog.hide(); window.open('./report.jsp', '_newtab');"/> 
32

의 onclick가 호출됩니다. 예를 들어, 대화 상자를 표시하기 전에 비즈니스 로직을 실행해야하는 경우에는 oncomplete를 사용하려고합니다. 그게 내가 항상 사용하는거야.

유효성 오류가없는 경우에만 수행하도록 oncomplete 내에서 JavaScript를 조건부로 지정할 수도 있습니다. 직관적으로 나는 onsuccess가 그런 식으로 행동하고 유효성 검사 오류가 없을 때만 실행한다고 생각하지만 그것이 어떻게 진행되는지는 아닙니다. 나는 그들 사이의 차이를 정말로 모른다. 나는 backing beans에서 success = false를 표시하는 방법이 있다고 가정하지만 실제로 문서에서 찾을 수는 없다.

당신이 당신의 onComplete 속성의 유효성을 확인하려면

, 이것은 당신이 할 거라고하는 방법입니다 : 필드가 제대로 검증하는 경우이 경우

oncomplete="if (!args.validationFailed){someDialog.hide()}" 

, 당신은 대화 상자를 닫습니다 것입니다. 당신은 실제로 backing 빈으로부터 매개 변수를 주입 할 수 있고 요청이 제공 된 후에 javascript에서 매개 변수를 사용할 수 있습니다. 귀하의 백업 콩에서이 같은 수행 할 수 있습니다

RequestContext.getCurrentInstance().addCallbackParam("showDialog", false); 

을 그리고 당신은 당신의 불완전한 속성이 같은 매개 변수에 액세스 할 수 있습니다

oncomplete="if (args &amp;&amp; args.showDialog){someDialog.show()}else{ alert('the bean didnt let me open the dialog')}" 

을 어쨌든, 난이 도움이되기를 바랍니다.

현재의 차이 볼 수 있습니다
+4

나는 그 & 기호를 벗어날 필요가 있었다 : \t oncomplete = "if (args & & args.showDialog) {dialog1.show()} else {alert ('bean이 대화 상자를 열지 못하게했습니다.')} " – 8bitjunkie