текст и текстовая область при повторном рендеринге не могут использовать клавиши со стрелками вверх и вниз для перемещения курсора - PullRequest
0 голосов
/ 28 февраля 2011

Я использую RichFaces 3.3.2 и JSF 1.2.

Сценарий:

В моем приложении, когда пользователь вводит некоторый текст в текстовое поле или текстовую область, мы должны активировать кнопку «Применить». Для этого мы используем событие rerender 'onkeyup'. Сообщение об ошибке проверки должно отображаться, когда пользователь вводит неверную дату

JSF Код страницы:

 <h:inputText id="input"  required="true" requiredMessage="Value cann't be null" 
 value="#{client.Value}" validatorMessage="Value should be between 0 and         999999999999.99"  valueChangeListener="#{myHandler.onChange}" maxlength="30">
  <f:validateDoubleRange minimum="0" maximum="999999999999.99"/>
   <a4j:support event="onkeyup" eventsQueue="A4JQueue"          reRender="outputPanel_btn_save"></a4j:support>

Применить код кнопки:

 <a4j:outputPanel id="outputPanel_btn_save">
 <a4j:commandButton value="#{msg.btn_Apply}" id="applyButton"  reRender="outputPanel_btn_save" eventsQueue="A4JQueue" disabled="#{myHandler.isApplyButtonDisabled}" styleClass="button" action="#{myHandler.update}">
 </a4j:commandButton>
 </a4j:outputPanel>

Код компонента поддержки для myHandler.onChange ()

 MyHandler {
  public void onChange(ValueChangeEvent event) {
    Iterator<FacesMessage> facesMessages = getFacesContext().getMessages();
    boolean isMessagePresent=false;
    while(facesMessages.hasNext()){
       FacesMessage message = facesMessages.next();
       isMessagePresent=true;
       break;
    }

if (event != null
    && event.getNewValue() != event.getOldValue()&& !isMessagePresent) {
        this.isApplyButtonDisabled = Boolean.FALSE;
    }
    if(isMessagePresent){
        this.isApplyButtonDisabled = Boolean.TRUE;
    }
}


}

Проблема: Когда пользователь вводит какое-либо текстовое событие onkeyup, мы перезапускаем кнопку «Применить». Из-за перерисовки клавиатуры клавиши со стрелками не работают, так как поле теряет фокус на событии Keyup. Я попытался с помощью JS включить кнопку «Применить», когда пользователь вводит какой-то текст. Но тогда проверки JSF не выполняются и сообщение проверки не отображается.

Вопрос: Можете ли вы предложить способ включения кнопки «Применить» без потери фокуса на текстовом поле / текстовой области, а также должны быть выполнены / отображены проверки JSF?

1 Ответ

0 голосов
/ 28 февраля 2011

Попробуйте использовать атрибут focusc в a4j: support. Это позволяет установить фокус на компонент после Ajax-запроса.

...