Хобрук: Ваш путь к мастерству в программировании

ActionListener командной кнопки PrimeFaces не срабатывает

Я использую основное лицо для веб-приложения, у меня есть эта проблема: у меня есть основная кнопка управления лицом с прослушивателем действий, когда я нажимаю эту кнопку, actionListener не срабатывает.

<p:dataTable var="car" value="#{cart.cartItems}" rendered="#{not empty cart.cartItems}">
<p:columnGroup type="footer">
            <p:row>
                    <p:column colspan="3" footerText="Wallet Balance (#{cart.displayWalletAmount}) " style="text-align:right" />
                    <p:column>
                        <p:panel id="walPayPanel">
                            <p:inputText value="#{cart.payWalletAmount}" maxlength="7"  size="5" id="walAmount" />
                            <p:spacer width="10" />
                            <p:commandButton actionListener="#{cart.updateTotalAmount}" update="totPay,totPaybel" id="iconOnly" title="update" icon="ui-icon-refresh" />
                        </p:panel>

                    </p:column>
                </p:row>

                <p:row>  
                    <p:column colspan="3" footerText="Total Payble: "  style="text-align:right"  />  
                    <p:column><p:panel id="totPay"><h:outputText  id="totPaybel" value="#{cart.totalPayble}"/></p:panel> </p:column>                  
                </p:row>

            </p:columnGroup>                

        </p:dataTable>

И это соответствующий код в бине,

public void updateTotalAmount() {
    log.info("Entering updateTotalAmount()");
            log.info("Pay wallet Amount : "+payWalletAmount);
        // Double total = getCartTotal();
        if (payWalletAmount < 0.0) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Wallet Amount cannot be a minus value", null);
            FacesContext.getCurrentInstance().addMessage(null, message);

        } else if (payWalletAmount > (walletAmount)) {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Wallet amount cannot be exceeded the available balance", null);
            FacesContext.getCurrentInstance().addMessage(null, message);

        }       

}

Интересно, что если я поместил выше командную кнопку вне таблицы данных, действие прослушивания будет запущено. Даже если я добавлю параметр Actionevent в метод bean, это не сработает. Может кто-нибудь сказать мне, как я могу решить эту проблему? Можно ли это сделать, не перемещая командную кнопку за пределы таблицы данных или группы столбцов?

06.12.2012

Ответы:


1

Есть две возможные вещи, которые могут вам помочь. Один из них добавляет '()' в ваш actionListener. Некоторые люди ранее сообщали, что это может решить проблему:

<p:commandButton actionListener="#{cart.updateTotalAmount()}" update="totPay,totPaybel" id="iconOnly" title="update" icon="ui-icon-refresh" />

Другой подозрительной вещью является ваше заявление update. Попробуйте удалить его и посмотреть, работает ли кнопка. Если это так, это означает, что вам, вероятно, придется изменить его на: update=":totPay,:totPaybel"

Дайте мне знать, помогло ли это, если нет, я постараюсь найти другие возможные решения.

Редактировать 1:

Недавно я заметил аналогичную проблему, которую мне удалось решить, изменив сигнатуру метода на:

public void updateTotalAmount(AjaxBehaviorEvent event)

и удерживая слушателя:

 <p:commandButton actionListener="#{cart.updateTotalAmount}" update="totPay,totPaybel" id="iconOnly" title="update" icon="ui-icon-refresh" />

Также убедитесь, что ваш bean-компонент все еще жив (например, ViewScoped).

Удалось ли вам решить вашу проблему по-другому?

06.12.2012
  • спасибо, но это не сработало, сделал обе модификации по одной, первая не сработала, вторая выдает ошибку. javax.servlet.ServletException: Cannot find component with identifier ":totPay" referenced from "confirmForm:j_idt57:iconOnly". 06.12.2012
  • Хорошо, попробуйте полностью удалить обновление и добавить файл (). Если это не так, можете ли вы опубликовать больше своей страницы (пытаясь уменьшить ее до минимального размера, но ошибка все еще происходит). 06.12.2012
  • xhtml-код <h:form id="confirmForm"><p:dataTable var="c" value="#{cart.cartItems}"><p:column><h:outputText value="#{c.itemPrice}" /></p:column><p:columnGroup><p:row><p:column colspan="3"/><p:column><p:panel id="walPayPanel"><p:inputText value="#cart.payWalletAmount}" id="walAmount"/><p:commandButton actionListener="#{cart.updateTotalAmount()}" id="iconOnly" title="update"/></p:panel></p:column></p:row><p:row><p:column colspan="3"/><p:column><p:panel id="totPay"><h:outputText id="totPaybel" value="#{cart.totalPayble}"/></p:panel></p:column></p:row></p:columnGroup></p:dataTable></div></h:form> 06.12.2012
  • класс бобов @ManagedBean(name="cart") @SessionScoped public class ShoppingCartServiceBean implements Serializable{ private List<RestCartItem> cartItems; private String transactionFee, totalFee,displayWalletAmount; private Double cartTotal,totalPayble,walletAmount,payWalletAmount,tot,trnsFee = 0.0; public void updateTotalAmount() { log.info("Entering updateTotalAmount()"); //some code here } } 06.12.2012
  • Кажется, что вы закрываете div, прежде чем закрыть несоответствие тега формы? 06.12.2012
  • нет, если это так, это будет ошибка во время выполнения. и eclipse показывает такие ошибки. этот фрагмент кода не все, это минимум, который я могу здесь уместить, и есть намного больше тегов div, и все они должным образом закрыты, как я сказал ранее, если я поместю эту командную кнопку сбоку таблица данных работает. 06.12.2012

  • 2

    Вы должны заключить свой p:dataTable с <h:form></h:form>.

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

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..