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