0

ビューにフォームがあります。たとえば、次のように言います。

フォーム.xhtml

<h:form>
    <h:panelGrid columns="2">
        <h:outputLabel value="Name" />
        <h:inputText value="#{bean.name}" />

        <h:outputLabel value="Age" />
        <h:inputText value="#{bean.age}"
                     converter="#{ageConverter}" />

        <h:outputLabel value="" />
        <h:commandButton action="#{bean.submit}"
                         value="Submit" />
    </h:panelGrid>
</h:form>

次の Bean でサポートされています。

Bean.java

@Named
// Scope
public class Bean implements Serializable {
    @Inject private Service service;

    private String name;
    private int age;
    private List<Person> people;

    public void submit() {
        people= service.getPeople(name, age);
    }

    // getters & setters for name & age
    // getter for people
}

のビューの結果people:

結果.xhtml

<h:form>
    <h:dataTable value="#{bean.people}"
                 var="person">
        <h:column>
            <f:facet name="header">Name</f:facet>
            #{person.name}
        </h:column>

        <h:column>
            <f:facet name="header">Day of Birth</f:facet>
            #{person.dayOfBirth}
        </h:column>
    </h:dataTable>
</h:form>

- form.xhtmlを使用してフォームを送信する- Bean.java を使用してサービスからユーザーを取得する - result.xhtml を使用してユーザーを表示する

この例では、まだパズルの一部が不完全です。たとえば、スコープはpeople、結果にまったく含まれているかどうかで決定的であり、さらに、結果のページへの転送 (または同様のもの) はありません。

今、これを達成するための最良の(または少なくとも良い)方法が何であるかはわかりません。ここに私が考えることができたいくつかの方法があります:

  • (JSF2.2) と暗黙のナビゲーション ( fromを@ViewScoped返す)を使用して、2 番目のページに移動します。ただし、これはビュースコープを壊します(とにかくこれを達成するために)?Stringsubmit()
  • いくつかの EL@ViewScopedに基づいて、適切なファイル (form.xhtml または result.xhtml) を使用して含めます。rendered=''これは、送信時に Ajax 呼び出しを使用して実行できます。
  • result.xhtml へのリクエストで値nameをGET パラメータとして渡し、ロジックを実行します(ただし、フォームが「巨大」な場合はどうなりますか?)。この場合は十分でしょう。age@PostConstruct@RequestScoped

私の質問は、このユースケースを達成するための効率的で良い (最良の) 方法は何でしょうか?

ご意見ありがとうございます。

4

2 に答える 2

2

あなたが探しているのはflash scopeだと思います。リダイレクト後は存続しますが、後続のリクエストでは使用できなくなります。

解決策は、フラッシュスコープを介して変数nameと変数を渡し、それらを使用して結果をレンダリングすることです。age

于 2013-05-18T09:35:08.420 に答える
1

JSF 2.2 は を提供しただけでなく@ViewScoped、 も提供したよう@FlowScopedです。詳細については、ドキュメントをご覧ください。これは要件をうまく満たしているようです。

于 2013-05-18T09:48:11.330 に答える