Nano Hash - криптовалюты, майнинг, программирование

Страница зависает при нажатии a4j: commandLink после нажатия h: commandLink

У меня есть страница 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 "Рассчитать итог" (что с ним не так)?

P.S. Забыл упомянуть одну вещь: если я заменю

 <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>

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

19.03.2020

  • Барев Армине, я предполагаю, что ошибка в вашей логике, и ваше приложение вылетает. Есть ли у вас какие-либо журналы на стороне java-сервера? если нет: попробуйте опубликовать свою логику внутри BackingBean. 19.03.2020
  • Проверьте наличие ошибок javacript или ответов http, содержащих ошибки, 19.03.2020
  • @Kukeltje - кода js нет. 19.03.2020
  • Есть... a4j:* использует js за кулисами... Лучше сначала научиться немного разбираться в технологии, которую вы используете 19.03.2020
  • Никаких исключений на стороне сервера, никаких ошибок на стороне клиента. 20.03.2020
  • Я предлагаю добавить контейнер, в котором находится ваша таблица и кнопка сохранения, и ваши атрибуты reRender должны указывать на этот контейнер. 21.03.2020

Ответы:


1

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

21.03.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..