11

JSFアプリケーションを構築しています。GUIを定義し、selectステートメントを使用してデータベースにクエリを実行しました。

valueここで、insertステートメントを実行する必要がありますが、のようなJSF入力コンポーネントを読み取って<h:inputText>、挿入を実行するBeanに送信する方法がわかりません。

<h:inputText>値をマッピングしてfaces-config.xml、Javaコードに含めることができるようにする必要がありますか?

4

1 に答える 1

33

すべての<h:inputXxx>/<h:selectXxx>コンポーネントをに入れ、ゲッター/セッターのペアに裏打ちされたのようなEL式を介してそれらの属性をBeanプロパティに<h:form> バインドする必要があります。適切に設定されている場合、フォームがまったく同じフォームのコンポーネントを介して送信されると、JSFはBeanの値を自動的に設定します。ベアメソッドを指すのようなEL式を介して、コンポーネントの属性でBeanアクションメソッドを指定できます。送信されたすべての値は、通常のJavaの方法ですぐに利用できます。value#{bean.property}<h:commandXxx>action<h:commandXxx>#{bean.action}action()

1つの入力フィールドと1つの選択フィールドを持つこのJSFフォームの例を考えます。

<h:form>
    <h:inputText value="#{bean.text}" required="true" />
    <h:selectOneMenu value="#{bean.choice}" required="true">
        <f:selectItem itemValue="#{null}" />
        <f:selectItem itemValue="One" />
        <f:selectItem itemValue="Two" />
        <f:selectItem itemValue="Three" />
    </h:selectOneMenu>
    <h:commandButton value="submit" action="#{bean.submit}" />
    <h:messages />
    <h:outputText value="#{bean.result}" />
</h:form>

次のBeanは、送信された値をstdoutに出力し、アクションメソッドでアクセスする瞬間よりずっと前にJSFがすでに値を設定していることを証明します。

package com.example;

import javax.inject.Named;
import javax.enterprice.context.RequestScoped;

@Named // Use @javax.faces.bean.ManagedBean on outdated environments.
@RequestScoped // Use @javax.faces.bean.RequestScoped on outdated environments.
public class Bean {

    private String text;
    private String choice;
    private String result;

    public void submit() {
        result = "Submitted values: " + text + ", " + choice;
        System.out.println(result);
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getChoice() {
        return choice;
    }

    public void setChoice(String choice) {
        this.choice = choice;
    }

    public String getResult() {
        return result;
    }
}

それで全部です。通常のフォームをajaxフォームに変換するには、<f:ajax>以下のようにコマンドコンポーネントにaをネストします。

<h:commandButton value="submit" action="#{bean.submit}">
    <f:ajax execute="@form" render="@form" />
</h:commandButton>

JSF wikiページの下部に、別の例と貴重なリンクがあります。

送信された値で何をしようとしても、JSFの責任を超えていることに注意してください。たとえば、それを操作したり、別のクラスに渡したり、データベースに保存したりします。これらすべてがJSFに関連しているわけではありません。これは、HTMLフォームベースのフレームワークであるため、使用可能なJava変数のフレーバーで送信された値を提供するという役割をすでに果たしています。残りはあなた次第です。

次のステップを調査するには、この時点で、JSFベースのユーザーインターフェイス全体ではなく、すでに多数の準備済み/ハードコードされた変数があるかのように実行する必要があります。たとえば、データベースの値を保存するために、人々は通常、EJBのようなビジネスサービスレイヤーフレームワークを使用し、EJBはJPAのような永続レイヤーフレームワークを使用します。そのために「プレーンバニラ」JDBCを使用する人もいます。具体的な例へのリンクについては、JSFコントローラー、サービス、DAOから始めてください。

于 2010-09-09T23:20:38.510 に答える