2

我想使用 JavaScript 来操作 JSF/Facelets 页面中的隐藏输入字段。页面加载时,我需要为客户端的颜色深度设置一个隐藏字段。

来自我的 Facelet:

<body onload="setColorDepth(document.getElementById(?????);">

<h:form>
  <h:inputHidden value="#{login.colorDepth}" id="colorDepth" />
</h:form>

当 JSF 处理页面时,它当然会更改元素的 ID。从我的 JavaScript 代码中引用这些元素的最佳方式是什么?

4

4 回答 4

4

您需要设置表单的 ID,以便知道它是什么。然后,您将能够构建实际的元素 ID。

<body onload="setColorDepth(document.getElementById('myForm:colorDepth');">

<h:form id="myForm">
  <h:inputHidden value="#{login.colorDepth}" id="colorDepth" />
</h:form>

如果您不想设置表单的 ID 字段,可以在运行时找到它,如下所示:

<body onload="setColorDepth(document.getElementById(document.forms[0].id + ':colorDepth');">
于 2008-10-23T20:35:02.523 回答
0

查看生成的html源码,看看jsf给标签的id属性取了什么名字。

您很快就会看到命名约定是如何工作的。它通常像 FORMNAME:FIELDNAME

于 2008-10-23T20:35:38.140 回答
0

您可以使用UIComponent.getClientId(FacesContext)返回的控件的clientId。有关示例代码,请参见此处

于 2008-11-05T17:43:41.120 回答
0

全局定义一个函数 findElement 并在任何地方使用它

function findElement(elementId) {
        if(document.getElementById(elementId)) return elementId;
        for(var  i = 0; i < document.forms.length; i++) {
            if(document.getElementById(document.forms[i].id + ':' + elementId)) {
                return document.forms[i].id + ':' + elementId;
            }
        }
        return null;
    }


    <body onload="setColorDepth(findElement('colorDepth'));">
于 2008-11-05T18:19:39.037 回答