Проблема: Иногда вам нужно получить доступ к компоненту из javascript с помощью
getElementById
, но id генерируются динамически в JSF, поэтому вы
нужен метод получения идентификатора объектов. Ниже я расскажу о том, как вы можете это сделать.
Оригинальный вопрос: Я хочу использовать некоторый код, как показано ниже. Как я могу ссылаться на компонент inputText JSF в своем Javascript?
<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.0 добавляет
метод zero-argument getClientId()
для класса UIComponent
.
Таким образом, предлагаемая конструкция #{myInptTxtId.clientId}
выше, чтобы получить фактический сгенерированный идентификатор компонента.
Хотя в моих тестах это не работает. Может ли кто-нибудь подтвердить/опровергнуть. Нижеприведенные ответы имеют недостаток, техника не делает. Поэтому было бы хорошо знать, была ли упомянутая выше техника фактически работает.