2013-03-22 100 views
0

我正在創建一個動態表單,它根據單選按鈕的選擇隱藏/取消隱藏字段。 我正在使用正常的JavaScript函數,如下所示,它在我的門戶環境中正常工作(ids是我通過查看源獲得的JSF ID)。JSF portlet爲不同環境生成不同的ID

function printHiddenValue(){ 
     alert("hello"); 
     alert(document.getElementById('A1938:j_idt4:create-ticket:hiddenId').value); 
     if(document.getElementById('A1938:j_idt4:create-ticket:j_idt19:0').checked){ 
      alert("incident sellected") 
     } else 
      { 
      alert("change sellected") 

      } 

    } 

但是當我在不同的環境中部署戰爭時會失敗,因爲不同的ids是由門戶環境生成的。

回答

1

您不應該依賴動態ID,而不僅僅是A1938 ID的一部分,但如果您更改頁面結構,例如j_idt4也可能會發生變化。你應該給ID到組件j_idt4,併爲第一部分,你可以使用EL #{facesContext.externalContext.response.namespace}讓您的portlet的命名空間:

document.getElementById('#{facesContext.externalContext.response.namespace}:j_idt4:create-ticket:hiddenId') 
+0

是的,但是我怎麼分配的ID給組件j_idt4,你可以在A1938看到:j_idt4:創建-ticket:j_idt19:0新的j_idt19:0被生成,但在源文件中,我沒有得到什麼組件。 – sidkool3k 2013-03-22 08:15:46

+0

那麼它是一些命名容器組件我不知道,因爲我沒有facelet代碼。至少嘗試動態獲取Portlet命名空間,而不是依賴常量。 – partlov 2013-03-22 08:17:07