2010-05-04 73 views
0

是否有可能使用JavaScript添加JSF組件?就我而言,在更改選擇選項時,我需要顯示輸入控件的不同組合(如文本框)。我以爲我可以使用元素和innerHTML屬性來顯示動態controls.But它似乎不工作!如何在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> 

javascript代碼: ~~~~~~~~~~~~~~~~

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頁面。 Rightclick和*查看源*。你現在醒了嗎? – BalusC 2010-05-04 12:32:33

回答

4

是否可以使用JavaScript來添加JSF組件?

不 - 這將是一個安全噩夢。

JSF控件在服務器上運行(儘管可能會發出JavaScript以獲得更豐富的客戶端體驗)。這些h:foo元素在將JSP轉換爲Java時由服務器的JSP編譯器解釋。

JavaScript在瀏覽器中運行。

我建議說明你想要嘗試和實現的內容,然後詢問如何使用JSF來實現它的建議。

0

正如McDowell所說,你不能通過Javascript將組件添加到JSF樹中,但它聽起來像所有你想要做的就是在一個大輸入框或三個小框之間交換頁面上的控件。

有幾種方法可以做到這一點:

  1. 擁有所有控件的頁面和 節目上/用JavaScript隱藏起來。你已經做了類似的事情,但將3個小方塊綁定到後端值並切換顯示none/block而不是處理innerHTML。

  2. 在頁面上有一組控件並使用ajax(例如richfaces)選擇性地呈現它們。

1

您不能使用javascript添加jsf組件。您可以簡單地操縱現有組件的可見性(css displayvisibility屬性)。

(你可以用RichFaces的同時使用jQuery