我正在使用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移动命令按钮的情况下完成吗?
答案 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>
。