Хорошо, вот основная проблема.
Страница. У меня есть два обязательных «ввода текста».
Командная кнопка, которая изменяет значение bean-компонента и возвращает объект «задание».
<a4j:form id="pervForm">
SURNAME:<h:inputText id="surname" label="Surname" value="#{prevManager.surname}" required="true" />
<br/>
JOB:<h:inputText value="#{prevManager.job}" id="job" maxlength="10" size="10" label="#{msg.common_label_job}" required="true" />
<br/>
<a4j:commandButton value="Set job to Programmer" ajaxSingle="true" reRender="job">
<a4j:actionparam name="jVal" value="Programmer" assignTo="#{prevManager.job}"/>
</a4j:commandButton>
<h:commandButton id="save" value="save" action="save" class="HATSBUTTON"/>
</a4j:form>
Вот простой менеджер:
public class PrevManager
{
private String surname;
private String job;
public String getSurname()
{
return surname;
}
public void setSurname(String surname)
{
this.surname = surname;
}
public String getJob()
{
return job;
}
public void setJob(String job)
{
this.job = job;
}
public String save()
{
//do something
}
}
Давайте сделаем это:
Напишите что-нибудь в тексте ввода задания (например, «учитель»).
Оставьте пустую фамилию.
Сохранить.
Появляется ошибка проверки (фамилия обязательна).
Нажмите «Задать программисту»: ничего не происходит.
Проверяя значение bean-компонента, я обнаружил, что оно корректно обновляется, действительно, компонент на странице не обновляется!
Ну, в соответствии с документами JBoss, которые я нашел:
Область Ajax является ключевым компонентом Ajax.
Это ограничивает часть компонента
дерево для обработки на сервере
сторона, когда приходит запрос ajax.
Обработка означает вызов во время
Декодирование, проверка и обновление модели
фаза. Наиболее распространенные причины использования
регион являются:
- предотвращение прерывания обработки жизненного цикла JSF во время
проверка правильности ввода другой формы
ненужный для данного запроса ajax;
-определение различных стратегий, когда события будут доставлены
(Немедленная = "истина / ложь")
-отображение индивидуального индикатора состояния AJAX
-повышение производительности обработки рендеринга
(SelfRendered = "истина / ложь",
renderRegionOnly = "true / false")
Следующие два примера показывают
ситуация, когда ошибка проверки
не позволяет обрабатывать вход ajax.
Введите имя Выходной текст
компонент должен появиться после вас.
Однако в первом случае это
активность будет прервана из-за
другое поле с обязательным = "истина".
Вы увидите только сообщение об ошибке
пока поле "Работа" пусто.
Вот вам пример:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<style>
.outergridvalidationcolumn {
padding: 0px 30px 10px 0px;
}
</style>
<a4j:outputPanel ajaxRendered="true">
<h:messages style="color:red" />
</a4j:outputPanel>
<h:panelGrid columns="2" columnClasses="outergridvalidationcolumn">
<h:form id="form1">
<h:panelGrid columns="2">
<h:outputText value="Name" />
<h:inputText value="#{userBean.name}">
<a4j:support event="onkeyup" reRender="outname" />
</h:inputText>
<h:outputText value="Job" />
<h:inputText required="true" id="job2" value="#{userBean.job}" />
</h:panelGrid>
</h:form>
<h:form id="form2">
<h:panelGrid columns="2">
<h:outputText value="Name" />
<a4j:region>
<h:inputText value="#{userBean.name}">
<a4j:support event="onkeyup" reRender="outname" />
</h:inputText>
</a4j:region>
<h:outputText value="Job" />
<h:inputText required="true" id="job1" value="#{userBean.job}" />
</h:panelGrid>
</h:form>
</h:panelGrid>
<h:outputText id="outname" style="font-weight:bold" value="Typed Name: #{userBean.name}" />
<br />
</ui:composition>
Форма 1: поведение некорректно. Мне нужно заполнить работу, а затем имя.
Форма 2: поведение правильное. Мне не нужно заполнять работу, чтобы увидеть правильное значение.
К сожалению, использование области Ajax не помогает (действительно, я использовал это неправильно ...), потому что мои поля ОБЯЗАТЕЛЬНЫ. Это главное другое.
Есть идеи?
Большое спасибо.