Страница зависает при нажатии a4j: commandLink после нажатия на h: commandLink - PullRequest
0 голосов
/ 19 марта 2020

У меня есть страница 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>

все работает просто отлично с одним ограничением: все сообщения проверки удаляются после нажатия кнопки.

1 Ответ

0 голосов
/ 21 марта 2020

Я наконец решил проблему. Причина была в css классе «submit», который использовался для кнопки «Calculate Total» с классом «input-submit». Я пытался найти точный атрибут, вызывающий проблему, но не смог. Таким образом, обходное решение было: добавить новый класс css: «audit-input-submit», который представлял собой комбинацию атрибутов классов «submit» и «input-submit» (исключая дубликаты). После этого проблема решена. Конечно, если бы я мог найти точное значение атрибута css, которое вызывало проблему, было бы лучше.

...