0

我正在为 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 参数,它也不起作用。有人可以告诉我如何解决这个问题吗?这可以在不将命令按钮从数据表或列组之外移动的情况下完成吗?

4

2 回答 2

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例如)。

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

于 2012-12-06T10:05:44.097 回答
0

您应该将您的 p:dataTable 用<h:form></h:form>.

于 2014-06-26T12:37:21.450 回答