PrimeFaces命令按钮actionListener不会触发

时间:2012-12-06 09:57:21

标签: primefaces

我正在使用prime face用于Web应用程序,我遇到了这个问题,即我有一个带有动作监听器的主要面部命令按钮,当我单击该按钮时,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>

这是bean中的相关代码,

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

        }       

}

有趣的是,如果我将命令按钮放在数据表的一侧,那么动作监听就会被触发。即使我在bean方法中添加Actionevent参数,它也不起作用。有人能告诉我怎样才能解决这个问题?这可以在不从数据表或columnGroup移动命令按钮的情况下完成吗?

2 个答案:

答案 0 :(得分:0)

有两件事可以帮到你。一个是在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)。

您是否设法以不同方式解决问题?

答案 1 :(得分:0)

您应将p:dataTable与<h:form></h:form>

括起来