1

JSF ページに次のコードがあります。

<a href="#adios" data-toggle="modal">
<h:commandButton value="Pay!" action="#{basketManager.pay(accountManager.currentAccount.username)}" 
class="btn btn-primary btn-lg"></h:commandButton>
</a>

モーダルは表示されますが、action実行されません... 両方のアクション (モーダルの表示とメソッドの呼び出し) を同時に実行するにはどうすればよいですか?

4

2 に答える 2

1

onclick="alert('Clicked submit button!');"フォームを送信するときにスクリプトを実行する場合は、commandButton タグ内でイベントを使用できます 。

両方のアクションを実行する方法の 1 つは@ManagedProperty、Bean でアノテーションを使用することです。たとえば、あなたのsumbitボタンをこれに変更してください

<h:form>
    <h:commandButton value="Pay!" action="#{basketManager.pay()}" 
    class="btn btn-primary btn-lg" onclick="alert('Clicked submit button!');" />
</h:form>

次に、Bean は次のようになります。

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(name = "basketManager")
@RequestScoped
public class BasketManager implements Serializable {

    @ManagedProperty(value="#{accountManager}")
    private AccountManager accountManager;

    //this is nessesery!
    public void setAccountManager(AccountManager accountManager) {
        this.accountManager = accountManager;
    }

    public String pay() {
        if(accountManager != null) {
            //... do something using accountManager.currentAccount.username
        }
        return ""; // your action result
    }
}

BasketManager Bean は、AccountManager Bean と同じかそれよりも小さいスコープにある必要があることを覚えておく必要があります。たとえば、AccountManager が場合、BasketManager は@SessionScopedまたは@SessionScopedまたは@ViewScopedになり@RequestScoperます。そんなことはあり得ない@ApplicationScoped

于 2013-10-18T06:00:31.330 に答える