У меня есть страница JSF с бэк-бином. Страница содержит h:form
с многочисленными полями ввода и кнопками. Вся страница отправляется с h:commandLink
, а также есть несколько кнопок a4j:commandLink
. При нажатии на кнопку a4j:commandLink
после того, как страница была отправлена h:commandLink
, страница переходит в состояние «Идет загрузка, пожалуйста, подождите» на неопределенный срок.
Страница выглядит следующим образом:
<a4j:region>
<rich:dataTable id="itemsTable" ...>
<!-- richColumns-->
<rich:column>
<a4j:commandLink id="calculate_item" action="#{BackingBean.calculateItem}" value="Calculate" reRender="itemsTable">
<f:param name="itemIndex" value="#{rowIndex}" />
</a4j:commandLink>
<a4j:commandLink id="delete_item" immediate="true" action="#{BackingBean.cleanItem}" value="Delete" reRender="itemsTable">
<f:param name="itemIndex" value="#{rowIndex}" />
</a4j:commandLink>
</rich:column>
<f:facet name="footer">
<!-- richColumns-->
<rich:column>
<a4j:commandLink id="sum_all" styleClass="submit input-submit" action="#{BackingBean.calculateTotalSum}" value="Calculate Total" reRender="itemsTable" />
</rich:column>
</f:facet>
</rich:dataTable>
</a4j:region>
<h:commandLink id="save" styleClass="submit" value="Save" action="#{BackingBean.save}" />
Мой BackingBean выглядит следующим образом:
public class BackingBean {
// Fields and methods
public void calculateItem() {
// calculates
}
public void calculateTotalSum() {
// calculates total
}
public String save() {
boolean formIsValid = true;
// do validations
// save if the form is valid
return formIsValid ? "success" : null;
}
}
- Когда я нажимаю кнопку «Рассчитать» или кнопку «Рассчитать итог», все работает отлично.
- Когда я нажимаю на кнопку «Сохранить», все работает нормально (если в форме есть недопустимые поля (например, обязательные поля пусты), тогда отображаются сообщения проверки).
- При наличии недопустимых поля и я нажимаю кнопку «Сохранить», затем «Рассчитать» все работает отлично.
- Когда есть несколько недействительных полей и я нажимаю кнопку «Сохранить», то «Рассчитать общее» страница попадает на страницу входит в Статус «Идет загрузка, пожалуйста, подождите» на неопределенный срок.
Вопрос заключается в следующем: Почему a4j:commandLink
«Рассчитать» и «Рассчитать итог» ведут себя по-разному и как решить проблему с помощью a4j:commandLink
«Рассчитать общее» (что с ним не так)?
PS Забыл упомянуть одну вещь: если я подставлю
<a4j:commandLink id="sum_all" action="#{BackingBean.calculateTotalSum}" value="Calculate Total" reRender="itemsTable" />
с
<h:commandLink id="sum_all" action="#{BackingBean.calculateTotalSum}" value="Calculate Total">
<a4j:support reRender="itemsTable" event="" />
</h:commandLink>
все работает просто отлично с одним ограничением: все сообщения проверки удаляются после нажатия кнопки.