Я использую 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?