Использование JavaScript с JSF и Facelets - PullRequest
2 голосов
/ 24 октября 2008

Я хотел бы использовать JavaScript для управления скрытыми полями ввода на странице JSF / Facelets. Когда страница загружается, мне нужно установить скрытое поле для глубины цвета клиента.

С моего лица:

<body onload="setColorDepth(document.getElementById(?????);">

<h:form>
  <h:inputHidden value="#{login.colorDepth}" id="colorDepth" />
</h:form>

Когда JSF обрабатывает страницу, она, конечно, меняет идентификаторы элементов. Как лучше всего ссылаться на эти элементы из моего кода JavaScript?

Ответы [ 4 ]

4 голосов
/ 24 октября 2008

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

<body onload="setColorDepth(document.getElementById('myForm:colorDepth');">

<h:form id="myForm">
  <h:inputHidden value="#{login.colorDepth}" id="colorDepth" />
</h:form>

Если вы не хотите устанавливать поле идентификатора формы, вы можете найти его во время выполнения, например:

<body onload="setColorDepth(document.getElementById(document.forms[0].id + ':colorDepth');">
0 голосов
/ 05 ноября 2008

Определите функцию findElement глобально и используйте ее везде

function findElement(elementId) {
        if(document.getElementById(elementId)) return elementId;
        for(var  i = 0; i < document.forms.length; i++) {
            if(document.getElementById(document.forms[i].id + ':' + elementId)) {
                return document.forms[i].id + ':' + elementId;
            }
        }
        return null;
    }


    <body onload="setColorDepth(findElement('colorDepth'));">
0 голосов
/ 05 ноября 2008

Можно использовать clientId элемента управления , возвращаемый UIComponent.getClientId (FacesContext) . См. здесь для примера кода.

0 голосов
/ 24 октября 2008

Просмотрите сгенерированный источник HTML и посмотрите, как jsf назвал атрибут id тега.

Скоро вы увидите, как работает соглашение об именах. Обычно это как FORMNAME: FIELDNAME

...