2013-03-22 99 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