Вам необходимо использовать именно тот идентификатор, который JSF назначил в сгенерированном выводе HTML.Щелкните правой кнопкой мыши страницу в веб-браузере и выберите Просмотр источника .Это именно тот HTML-код, который видит JS (вы знаете, JS запускается в веб-браузере и перехватывает дерево HTML DOM).
Учитывая
<h:form>
<h:inputText id="emailAddresses" ... />
Это будет выглядеть примерно так:
<form id="j_id0">
<input type="text" id="j_id0:emailAddress" ... />
Где j_id0
- сгенерированный идентификатор сгенерированного элемента HTML <form>
.
Вы бы предпочли дать всем компонентам JSF NamingContainer
фиксированныйid
чтобы JSF не генерировал их автоматически.<h:form>
является одним из них.
<h:form id="formId">
<h:inputText id="emailAddresses" value="#{emailAddresses.emailAddressesStr}"/>
Таким образом, форма не получит автоматически сгенерированный идентификатор, такой как j_id0
, а поле ввода получит фиксированный идентификатор formId:emailAddress
.Затем вы можете просто ссылаться на него в JS.
var input = document.getElementById('formId:emailAddress');
С этого момента вы можете продолжать использовать код JS как обычно.Например, получение значения через input.value
.
См. Также:
Обновление согласно вашему обновлению: вы неправильно поняли статью блога.Специальная ссылка #{component}
относится к компоненту current , где вычисляется выражение EL, и это работает только внутри любого из атрибутов самого компонента.Все, что вы хотите, также может быть достигнуто следующим образом:
var input = document.getElementById('#{emailAddress.clientId}');
с (обратите внимание на binding
для представления, вы должны абсолютно не связывать его с бобом)
<h:inputText binding="#{emailAddress}" />
но это ужасно.Лучше использовать следующий подход, в котором вы передаете сгенерированный HTML-элемент DOM как JavaScript this
ссылку на функцию
<h:inputText onclick="show(this)" />
с
function show(input) {
alert(input.value);
}
Если вы используете jQuery, вы можетедаже сделайте шаг вперед, абстрагируя их, используя класс стилей в качестве интерфейса маркера
<h:inputText styleClass="someMarkerClass" />
с
$(document).on("click", ".someMarkerClass", function() {
var $input = $(this);
alert($input.val());
});