2011-04-06 6 views
1

MyFaces 1.1 + Tomahawk + Ajax4JSF를 사용하는 긴 프로젝트 후에 Myfaces 2.0을 사용하고 있습니다. 2.0은 확실히 큰 향상입니다. 비록 내가 일할 수있는 자바 스크립트를 onload 얻을 수 없습니다. 나는 내 머리에 붙어 :JSF 2.0 javascript onload/oncomplete

<script type="text/javascript"> 
    window.onload = function() { 
     var fileDownload = document.getElementById('userManagementForm:fileDownload'); 
     if (fileDownload.value == 'true') { 
      fileDownload.value = false; 
      window.open('Download'); 
     } 
    }     
    </script> 

그러나 그것은 실행되지 않습니다. 나는 근원 myfacecs JS에 조금 보았다. 그리고 나는 그들이 onload로 약간의 재료를한다는 것을 알아 차렸다. 세부 사항에 너무 많이 들지는 않았지만 onload 이벤트를 재정의하려는 내 시도를 차단하는 것 같습니다. 이것, JSF 라이브러리에 직접 호출에 다른 방법이 있습니까?

또 다른 질문은 같은 주제에 관한 것입니다. Ajax4JSF에는 Ajax 요청이 완료된 후에 Javascript를 실행할 수있는 "oncomplete"특성이 있습니다. MyFaces 2.0에 f : ajax와 동일한 기능이 있습니까? 그것을 생각해 보러 와서 나는 이벤트 = "온 콤플리트"를 시도하지 않았다. 아마 작동 할 것이다.

+0

HTML 당신의 onLoad()에 매여 다른 방법을 얻을 않는>? –

답변

4

그래, 알아 냈어.

나는 그것이 온로드를 대체 페이지의 끝에서 스크립트를로드하면 나중에

를 오버라이드 (override)됩니다 페이지의 상단에있는 스크립트를로드

, 그러나 또한 JSF 메커니즘을 나누기. 그래서 더 나은 해결책은 JSF의 onload를 사용하고 페이지 끝 부분에 스크립트를 넣는 것입니다. JSF 소스를 파헤 치다가 그 기능을 발견했다.

<script type="text/javascript"> 
     myfaces._impl.core._Runtime.addOnLoad(window, checkDownloadFile); 
</script> 

물론 원래 게시물에 있던 것을 수행하는 checkDownloadFile을 정의해야했습니다.

나는 또한 미완성을 알아 냈습니다. f : ajax 태그에는 3 회 호출되는 onevent 속성이 있습니다. 한 번 실행하기 전에 두 번. 페이지 구성 요소를 업데이트 한 후 요청을 완료 한 직후에 한 번 믿습니다. 콜백 함수는 상태가있는 이벤트 매개 변수를 사용합니다. 따라서 콜백 함수에서 상태를 확인하여 무언가를할지 여부를 결정합니다. 상태는 시작, 완료 및 성공입니다. 내 경우에 대한 그래서 내가 가진 : 다음

<f:ajax execute="userManagementForm" event="click" onevent="myEvent" render="userManagementForm:results userManagementForm:workarea userManagementForm:fileDownload" /> 

그리고 스크립트를 :

function myEvent(e) { 
     if (e.status == 'success') { 
      checkDownloadFile(); 
     } 
    }