2012-05-10 12 views
0

commandButtonがヒットしたときに基本的にユーザーのエントリを処理するWebアプリケーションがあり、トランザクションの応答/結果メッセージを受け取る必要があります。別のJSFページに表示されます。応答中にバッキングBeanからJSFページへのパス/リダイレクト/ディスパッチ方法

は、ここで私が何をしたいのサンプルです:私はJSF2とprimefaces

registration.xhtml使用しています - トランザクションの開始点

RegistrationBeanを - registration.xhtmlが使用するバッキングBeanを - registration.xhtmlのcommanButtonを介して呼び出され、ナビゲーション用の文字列(result.xhtml)を返す "create"メソッド(ResultBeanの入力データを処理し、おそらくResultBeanを設定します)

result.xhtmlから

ResultBean取引の結果UIは - 私はインターネット上でのサンプルのために検索してきたresult.xhtml

で必要な値を保持し、1を見つけることができませんように見えます。これを達成する方法はありますか?それがない場合は、おそらく回避策ですか?私はこれを使って初心者です。どんな助けでも大歓迎です。前もって感謝します! サンプルコードは下記を参照してください。

registration.xhtml:

<h:form style="position: absolute" id="basicPartyRegistration"> 
<h:panelGroup> 
    <h:commandButton id="createButton1" action="#{partyRegistration.create}" value="Create"> 
    </h:commandButton> 
    <h:button outcome="welcome" value="Main Page" id="mainPageButton" /> 
</h:panelGroup> 
<br /> 
<h:panelGroup> 
    <p:panelGrid columns="2"> 
    <h:outputText value="Receiver:" /> 
    <h:inputText id="receiver" 
     value="#{partyRegistration.partyRegistrationInfo.receiverGLN}" 
     size="15" maxlength="13" /> 
    <h:outputText value="TransmittingData:" /> 
    <h:inputText id="transmittingDataPool" 
     value="#{partyRegistration.partyRegistrationInfo.transmittingDataPool}" 
     size="15" maxlength="13" /> 
    <h:outputText value="PartyData:" /> 
    <h:inputText id="partyData" 
     value="#{partyRegistration.partyRegistrationInfo.partyDataPool}" 
     size="15" maxlength="13" /> 
</p:panelGrid> 

..... 
..... 

RegistrationBean:

@ManagedBean (name = "partyRegistration") 
@viewScoped //Changed to @ConversationScoped 
public class RegistrationBean implements Serializable{ 
    private String receiver 
    private String transmittingData; 
    private String partyDataPool; 
    @ManagedProperty (value = "resultBean") 
    private Result result; 
    // more variables 
    //public getters and setters 

    public String create(){ 
     // do some processing 
     // some magic way to set RESULT bean to be used in the next page 
     return "result"; 
    } 
} 

result.xhtml

<h:form style="position: absolute" id="partyRegistrationResponse"> 
<h:panelGroup> 
<h:button outcome="welcome" value="Main Page" id="mainPageButton" /> 
</h:panelGroup> 
<br/> 
<h:panelGroup> 
<p:panelGrid columns="4"> 
    <h:outputText value="Last Date Changed: " /> 
    <p:inputText id="lastDateChg" value="#{partyResponse.lastChangedDateItem}" 
     title="Last Date Changed" size="15" > 
    </p:inputText> 

</p:panelGrid> 
<h4>Response Identification</h4> 
..... 
..... 

ResultBean:()メソッドを作成し、あなたのRegistrationBean年代にResultBeanを作成し、資格の範囲でプログラム的な方法でそれを置くために

@ManagedBean (name = "partyResponse") 
@ViewScoped //changed to @ConversationScoped 
public Class ResultBean implements Serializable{ 
    private Date lastChangedDateItem; 
    //more variables 
    //getters and setters 
} 

のfaces-config.xmlの

<navigation-rule> 
    <navigation-case> 
     <from-outcome>result</from-outcome> 
     <to-view-id>/result.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 
+1

@ManagedBean @SessionScoped public Class SessionBean private Result currentResult; // getter and setter } 

とご登録の豆で:セッションでたとえば

は、現在の結果を保持するBeanをスコープ。問題はどこだ? (ナビゲーションルールはJSF 2.0では必要ありません) –

+0

Thanks Matt。ここで達成しようとしているのは、result.xhtmlにResultBean(createButtonで設定されている)が含まれていることです。 result.xhtmlページ –

答えて

1

してみてください。登録ビューを終了するので、ViewScopeは適切な選択肢ではない可能性があります。

リダイレクトを乗り切るには、フラッシュ範囲に入れます。

FacesContext.getCurrentInstance().getExternalContext().getFlash().putNow("partyResponse", resultBean); 

あなたは1ユースケースに属するページの順序のための豆を、格納するのに有用である、あまりにも、対話スコープを見ている必要があります。

+0

のFrank(私はResultBeanプロセスからの応答メッセージが必要です。もう1つのことは、会話の範囲は、継ぎ目や風に右ですか?私がそれを使用するなら、それらとプライムフェイスとの間に互換性の問題があるかどうか知っていますか? –

+0

これはseamによって導入されましたが、現在は公式のJava標準です:CDI。したがって、CDI対応のコンテナが必要ですが、必ずしもシームを使用する必要はありません。縫い目のホームページ上の溶接を探してください、それはCDIの実装です。 tomcatはデフォルトでCDIを提供していないので、tomcatで使うことができます。 [link](http://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/environments.html#d0e5221)Primefaceもこれで動作します。 – Frank

+0

こんにちはフランク!ありがとう!私はついにそれを得た。私は会話の範囲を示唆して使用し、それは働いた!私はまた、フラッシュスコープを試みたが、それはビュースコープのビーンで動作しませんでした。 –

0

には単純な文字列が必要な場合は、FacesMessageを使用しないのはなぜですか?

public String create(){ 
    FacesContext.getCurrentInstance() 
     .addMessage(null, new FacesMessage("Add your message here")); 
    return "result"; 
} 

とあなたのresult.xhtml<h:messages>タグを使用:あなたは結果メッセージよりも多くを必要とする場合は、あなたが本当にあなたのデザイン上だと思うし、より広い範囲(会話の中でResultBeanを置く必要がありそうでない場合

<h4>Response Identification</h4> 
<h:messages/> 

をまたはセッション)。申し訳ありませんが、私にとってあなたが達成しようとしているものは明らかではない

// inject the session scoped bean 
@ManagedProperty(value="#{sessionBean}") 
private SessionBean sessionBean; 

public String create(){ 
    sessionBean.setCurrentResult(myResult); 
    return "result"; 
} 
+0

ありがとうございました。しかし、ResultBeanにデータを取り込むことができない場合、これが回避策になると思います。 ResultBeanは、日付、ステータス、および値のリストで構成されています。 –

+0

次に、より広い範囲を使用する必要があります。私の答えを更新しました。 –

関連する問題