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 パラメータを追加しても動作しません。誰かがこの問題を解決する方法を教えてもらえますか? コマンド ボタンをデータ テーブルまたは columnGroup の外に移動せずにこれを行うことはできますか?

4

2 に答える 2

0

There are two possible things that could help you. One is adding '()' to your actionListener. Some people previously reported that this can fix the problem:

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

The other suspicious thing is your update statement. Try removing it and see if the button works. If it does, that means that you probably have to change it to: update=":totPay,:totPaybel"

Let me know if it helped, if not I will try to come up with other possible solutions.

Edit 1:

I have noticed similar problem recently that I managed to solve by changing the method signature to:

public void updateTotalAmount(AjaxBehaviorEvent event)

and keeping the listener:

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

Also make sure that your bean is still alive (ViewScoped for example).

Did you manage to fix your problem differently?

于 2012-12-06T10:05:44.097 に答える