1

私がやりたいのは、完了すると前のページに戻るJSFページを実装することです。これは@RequestScopedBeanを使用します。

viewDocument.xhtmlという元のページには次のものがあります。

<f:metadata>
    <f:viewParam name="ID" value="#{viewDocument.id}" />
</f:metadata>

 (bunch of stuff)

<h:link outcome="editThingy" value="Edit Thingy">
    <f:param name="ID" value="#{viewDocument.doc.id}" />
    <f:param name="Return" value="viewDocument" />
</h:link>

ターゲットページeditThingy.xhtmlには独自のバッキングBeanがあり、次のようになります。

<f:metadata>
    <f:viewParam name="ID" value="#{editThingy.id}" />
    <f:viewParam name="Return" value="#{editThingy.navReturn}" />
</f:metadata>

<h:form>

   (bunch of stuff)

   <p:commandButton value="Save" action="#{editThingy.save}" >
      <f:param name="ID" value="#{editThingy.id}" />
   </p:commandButton>
   <p:commandButton value="Cancel" action="#{editThingy.navReturn}" >
       <f:param name="ID" value="#{editThingy.id}" />
   </p:commandButton>

</h:form>

アイデアは、両方のボタン(キャンセルまたは保存)がReturnリクエストパラメーターで示されたページに戻り、新しいページがIDリクエストパラメーターを取得するため、EditThingyが処理したのと同じレコードがプルアップされるというものです。

BZZZT!p:commandButtonはGETではなくPOSTを実行するため、f:paramを使用できません。ただし、p:buttonを使用しようとすると、バッキングBeanを呼び出す属性がありません。

私が欲しいものを実装する方法はありますか?

4

1 に答える 1

2

<f:param>問題なく動作するはずです。Returnパラメータの場合とまったく同じように、後続のリクエストでもパラメータを保持する必要があるだけですID。そうしないと、Beanがビュースコープではなくリクエストスコープであるため、フォーム送信の処理中に失われます。

したがって、

<p:commandButton value="Save" action="#{editThingy.save}" >
    <f:param name="ID" value="#{editThingy.id}" />
    <f:param name="Return" value="#{editThingy.navReturn} " />
</p:commandButton>
<p:commandButton value="Cancel" action="#{editThingy.cancel}" >
    <f:param name="ID" value="#{editThingy.id}" />
    <f:param name="Return" value="#{editThingy.navReturn} " />
</p:commandButton>

public String save() { 
    // ...
    return navReturn;
}

public String cancel() { 
    return navReturn;
}

更新:コメントに基づいて、機能要件がより明確になりました。キャンセルボタンは、キャンセル時にバッキングBeanアクションメソッドをまったく呼び出す必要がないことを前提として、次のように実行することもできます。

<p:button value="Cancel" outcome="#{editThingy.navReturn}" >
    <f:param name="ID" value="#{editThingy.id}" />
</p:button>

保存ボタンは次を返すことができます:

return navReturn + "?id=" + id + "&faces-redirect=true";
于 2012-10-06T13:44:54.327 に答える