2009-08-27 7 views
0

По умолчанию JSF динамически отображает имя идентификатора поля HTML. Имя идентификатора генерируется случайным образом в формате formname: id_some_random_number.Доступ к значениям полей html в структуре JSF

Из-за этого я не могу использовать document.getElementById ("").

Есть ли решение проблемы?

ответ

1

Вы можете получить сгенерированный идентификатор с помощью UIComponent.getClientId (JSF 2, если вы можете использовать его, добавляет нет-Arg версия, которая делает это более полезным с выражениями EL). См. this blog post за советы по работе с идентификаторами компонентов JSF (хотя обратите внимание на оговорки).

2

Вам просто нужно указать идентификатор входа. Однако обратите внимание, что идентификатор будет иметь префикс идентификатора формы, содержащей поле ввода.

Например:

<h:form id="myForm"> 
    ... 
    <h:inputText id="myInput" .../> 

реальный идентификатор inputText является MyForm: myInput.

Таким образом, этот код Javascript будет работать:

var obj = document.getElementById("myForm:myInput"); 


Редактировать (для точности)

Чтобы быть более точным, если компонент реализует интерфейс NamingContainer в Java, то все вложенные компоненты будут иметь свой идентификатор с префиксом идентификатора этого компонента. Это относится к компоненту <h:form/>, но также и для <h:datatable/>.

+0

Вот как это работает, но в некоторых случаях, например, если мы вставляем компонент внутри другого компонента, тогда генерируемый идентификатор не предсказуем. – Madhu

+0

Не могли бы вы изменить исходное сообщение, чтобы привести пример такого случая? – romaintaz

+0

Это работает в моих приложениях. Я не люблю использовать его, как если бы вы меняли любой из ваших идентификаторов компонентов или помещали их в другую форму, ваш javascript перестанет работать. –

2

Если все остальное не удается, вы можете попробовать предоставить уникальные классы css, а затем получить доступ к ним через getElementsByClassName(). Или попробуйте просмотреть childNodes() элемента с известным идентификатором. Или же вы можете добавить узел с известным идентификатором внутри вашего целевого элемента, а затем использовать .parentNode :)

не
+0

Кажется, это действительно сложное решение ... Зачем просто использовать атрибут «id»? – romaintaz

+0

Как говорит плакат, он не может использовать id, потому что он генерируется случайным образом. – n1313

+0

Производится случайным образом, за исключением случаев, когда вы определяете атрибут «id» ... – romaintaz

Смежные вопросы