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