Как делать обновления на стороне клиента в JSF 2.0 - PullRequest
1 голос
/ 06 октября 2010

Я бы хотел сделать обновления компонентов на стороне клиента.Пример: отключить кнопку при установке флажка:

<h:selectBooleanCheckbox value="true" onchange="button.disabled=true" />
<h:commandButton id="button" value="Save" />

Выше не работает.Есть ли способ сделать это декларативно в JSF?

Ответы [ 2 ]

3 голосов
/ 06 октября 2010

Не работает, потому что идентификатор компонента JSF не обязательно совпадает с сгенерированным идентификатором HTML.JSF составляет идентификатор элемента HTML и имя элемента формы на основе идентификаторов всех UINamingContainer компонентов в дереве - если они есть.UIForm компонент является одним из них.Щелкните правой кнопкой мыши страницу в веб-браузере и выберите Просмотр источника .Смотрите и учитесь.

Существует два способа решения этой проблемы:

  1. Установить prependId атрибут <h:form> в false.

    <h:form prependId="false">
        <h:selectBooleanCheckbox value="true" onclick="button.disabled=true" />
        <h:commandButton id="button" value="Save" />
    </h:form>
    

    Обратите внимание, что вместо этого я бы предпочел использовать onclick="button.disabled=!checked".onchange срабатывает только тогда, когда элемент ввода теряет фокус, и это не интуитивно понятно в случае флажков и радиокнопок.Кроме того, вы хотели бы включить его, когда флажок будет установлен снова, верно?

  2. Дайте <h:form> фиксированный идентификатор, чтобы вы знали, как генерируется имя элемента формывыглядит так:

    <h:form id="form">
        <h:selectBooleanCheckbox value="true" onclick="form['form:button'].disabled=true" />
        <h:commandButton id="button" value="Save" />
    </h:form>
    

    Обозначение в скобках является обязательным, поскольку : является недопустимым символом идентификатора и просто onclick="form:button.disabled=true" не будет работать.Также здесь я бы предпочел использовать onclick="form['form:button'].disabled=!checked вместо

Та же проблема относится и к document.getElementById().Так что простая замена button на document.getElementById('button') сама по себе не решит проблему.

2 голосов
/ 06 октября 2010

просто используйте JavaScript

document.getElementById("buttonId").disabled="true";  

Проверьте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...