2010-05-04 7 views
0

자바 스크립트를 사용하여 JSF 구성 요소를 추가 할 수 있습니까? 필자의 경우 선택 옵션을 변경하면 입력 컨트롤 (텍스트 상자 등)의 다른 조합을 표시해야합니다. 난 요소 및 innerHTML 동적 컨트롤을 표시하는 속성을 사용할 수 있다고 생각.하지만 그것은 작동하지 않는 것 같습니다!javascript에서 jsf 구성 요소를 추가하는 방법은 무엇입니까?

<h:selectOneMenu id="browseType" class="TextBlackNormal" 
          value="#{adminBean.browseType}" onchange="showDynamicBox(this);" 
          valueChangeListener="#{adminBean.theValueChanged}"> 
          <f:selectItems value="#{adminBean.browseTypeList}" /> 
         </h:selectOneMenu> &#160;&#160;&#160;</td> 
         <td> 
         <div id="dynamicBox" style="display:block"><h:inputText 
          class="TextBlackNormal" size="32" name="browseValue" 
          id="browseValue" value="#{adminBean.browseValue}" /></div> 
         </td> 

자바 스크립트 코드 : ~~~~~~~~~~~~~~~~

function showDynamicBox(selectObjj) 
{ 
    //alert('showDynamicBox ' +showDynamicBox); 
    if(selectObjj.options[selectObjj.selectedIndex].value=='IBD/Office/IP' 
     || selectObjj.options[selectObjj.selectedIndex].value=='APA#') 
    { 
     alert('just about to change'); 
     document.getElementById("dynamicBox").innerHTML='<h:inputText class="TextBlackNormal" size="3" name="val1" id="val1" /> <h:inputText class="TextBlackNormal" size="3" name="val2" id="val2" /> <h:inputText class="TextBlackNormal" size="3" name="val3" id="val3" /> '; 
     alert(' --> ' +document.getElementById("dynamicBox").innerHTML); 
    }else{ 
     alert('back to pavillion'); 
     document.getElementById("dynamicBox").innerHTML='<h:inputText class="TextBlackNormal" size="32" name="browseValue" id="browseValue" value="#{adminBean.browseValue}" />'; 
    } 

} 
+0

열고 JSF 페이지를 참조하십시오. 오른쪽 클릭 및 * 소스보기 *. 너 이제 깨어 났니? – BalusC

답변

4

는 자바 스크립트를 사용하여 JSF 구성 요소를 추가 할 수 있습니까?

아니요 - 보안상의 악몽이 될 수 있습니다.

JSF 컨트롤은 서버에서 실행됩니다 (클라이언트 측 환경을 풍부하게하기 위해 JavaScript를 내보낼 수도 있음). 그 h:foo 요소는 JSP를 Java로 변환 할 때 서버의 JSP 컴파일러에 의해 해석됩니다.

JavaScript가 브라우저에서 실행됩니다.

JSF를 사용하여 시도하고 달성하려는 제안을 제안한 다음 제안 방법을 제안합니다.

0

McDowell에 따르면 Javascript를 통해 JSF 트리에 구성 요소를 추가 할 수는 없지만 한 개의 큰 입력 상자 또는 세 개의 작은 입력 상자 사이에서 페이지의 컨트롤을 서로 바꿔 보는 것으로 들리는 것 같습니다.

  1. 가/페이지 및 쇼에 모든 컨트롤이 자바 스크립트와 함께 숨길 :

    이 작업을 수행하는 방법은 여러 가지가 있습니다. 이미 비슷한 일을하고 있지만 3 개의 작은 상자를 백엔드 값에 바인딩하고 innerHTML을 처리하는 대신 none/block 표시를 토글합니다.

  2. 페이지에서 하나의 컨트롤 집합을 선택하여 아약스 (예 : 풍질면)로 선택적으로 렌더링합니다.

1

javascript가있는 jsf 구성 요소를 추가 할 수 없습니다. 기존 구성 요소의 가시성 (css displayvisibility 속성)을 조작 할 수 있습니다.

(당신이 richfaces와 함께 jQuery를 사용할 수 있습니다.) 웹 브라우저에서

관련 문제