JSFPortlet为不同的环境生成不同的Id

JSFPortlet为不同的环境生成不同的Id,jsf,primefaces,liferay-6,Jsf,Primefaces,Liferay 6,我正在创建一个动态表单,根据单选按钮的选择隐藏/取消隐藏字段。 我使用的是下面给出的普通javascript函数,它在我的门户环境中运行良好(ID是我通过查看源代码获得的JSF ID) 但是当我在不同的环境中部署war时失败,因为门户环境生成了不同的id。您不应该依赖动态id,不仅仅是A1938id的一部分,而且j_idt4可能会因您更改页面结构而更改。您应该将id分配给组件j_idt4,对于第一部分,您可以使用EL{facesContext.externalContext.response.n

我正在创建一个动态表单,根据单选按钮的选择隐藏/取消隐藏字段。 我使用的是下面给出的普通javascript函数,它在我的门户环境中运行良好(ID是我通过查看源代码获得的JSF ID)


但是当我在不同的环境中部署war时失败,因为门户环境生成了不同的id。

您不应该依赖动态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')

是的,但我如何将id分配给组件j_idt4,正如您在A1938中看到的:j_idt4:创建票证:j_idt19:0生成了新的j_idt19:0,但在源代码中,我不知道该组件是什么。这是一些命名容器组件,我不知道,因为我没有facelet代码。至少尝试动态获取portlet名称空间,而不是依赖常量。
document.getElementById('#{facesContext.externalContext.response.namespace}:j_idt4:create-ticket:hiddenId')