3

私は JSF/Primefaces にかなり慣れていないので、問題を間違った方向に持っている可能性があり、フォーラムをかなり探し回っていますが、うまくいきませんでした。

問題を最大限に単純化し、ダミアンの@PostConstructを使用しました

再開するには、test.xhtml をロードすると、うなり声の通知がポップアップするようにしたいと思います。つまり、ユーザーの操作なしで...表示されませんが、保存ボタンをクリックすると表示されます。

sayHi() を通過しますが、その時点でコンテナーを認識していないようです。

WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.

目的は、データベース アクセスが失敗した場合にうなり声でユーザー フレンドリーな通知を表示することです。

私が信じているいくつかの基本原則が欠けているに違いありません:(

test.xhtml

    <h:form id="form">

        <p:growl id="growl" showDetail="true" showSummary="true" sticky="true" />  

        <h:outputLabel value="#{testGrowl.message}" />

        <p:commandButton value="Save" actionListener="#{testGrowl.save}" update="growl" />  
    </h:form>

TestGrowl.java

@ManagedBean
public class TestGrowl {
private String message;

public TestGrowl()
{
    //sayHi(); commented to try with @PostConstruct
    message = "we've been in the TestGrowl constructor";
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public void save(ActionEvent actionEvent) {  
    sayHi();
}  

@PostConstruct
private void sayHi(){
    FacesContext context = FacesContext.getCurrentInstance(); 
    context.addMessage(null, new FacesMessage("Successful", "Hello "));  
}
}

どうもありがとう

4

1 に答える 1

2

可能です。Bean のコンストラクター、@PostConstruct、または preRenderView リスナーにメッセージが追加されると、自動的にページに表示されるため、"onload" イベントを使用する必要はありません。コードの問題は、メッセージを正しく送信していないことです。これはあなたがそれを行うべき方法です:

FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "test", "test");  
FacesContext.getCurrentInstance().addMessage(null, msg);  

addMessage の最初のパラメーターは、エラーが発生したコンポーネントの ID、またはグローバル エラーの場合は null です。また、growl でグローバル メッセージのみを表示したい場合、および各コンポーネントの p:message のみを使用してコンポーネントに固有のエラー メッセージを表示したい場合はglobalOnly="true"、growl に追加する必要があります。

于 2012-06-18T12:07:39.487 に答える