问题:有时您希望使用 javascript 访问组件
getElementById
,但 id 是在 JSF 中动态生成的,因此您需要一种获取对象 id 的方法。我在下面回答你如何做到这一点。
原始问题: 我想使用如下代码。如何在我的 Javascript 中引用 inputText JSF 组件?
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<head>
<title>Input Name Page</title>
<script type="javascript" >
function myFunc() {
// how can I get the contents of the inputText component below
alert("Your email address is: " + document.getElementById("emailAddress").value);
}
</script>
</head>
<h:body>
<f:view>
<h:form>
Please enter your email address:<br/>
<h:inputText id="emailAddresses" value="#{emailAddresses.emailAddressesStr}"/>
<h:commandButton onclick="myFunc()" action="results" value="Next"/>
</h:form>
</f:view>
</h:body>
</html>
更新:这篇文章JSF2.0 中的客户端标识符讨论了使用如下技术:
<script type="javascript" >
function myFunc() {
alert("Your email address is: " + document.getElementById("#{myInptTxtId.clientId}").value);
}
</script>
<h:inputText id="myInptTxtId" value="backingBean.emailAddress"/>
<h:commandButton onclick="myFunc()" action="results" value="Next"/>
在上面的示例中,建议组件id
上的属性inputText
创建一个可以使用 EL 访问的对象#{myInptTxtId}
。文章继续指出 JSF 2.0getClientId()
向UIComponent
类添加了零参数方法。从而允许#{myInptTxtId.clientId}
上面建议的构造获取组件的实际生成的 id。
虽然在我的测试中这不起作用。其他任何人都可以确认/否认。下面建议的答案存在上述技术没有的缺点。所以最好知道上述技术是否真的有效。