JSFアプリケーションを構築しています。GUIを定義し、selectステートメントを使用してデータベースにクエリを実行しました。
value
ここで、insertステートメントを実行する必要がありますが、のようなJSF入力コンポーネントを読み取って<h:inputText>
、挿入を実行するBeanに送信する方法がわかりません。
<h:inputText>
値をマッピングしてfaces-config.xml
、Javaコードに含めることができるようにする必要がありますか?
JSFアプリケーションを構築しています。GUIを定義し、selectステートメントを使用してデータベースにクエリを実行しました。
value
ここで、insertステートメントを実行する必要がありますが、のようなJSF入力コンポーネントを読み取って<h:inputText>
、挿入を実行するBeanに送信する方法がわかりません。
<h:inputText>
値をマッピングしてfaces-config.xml
、Javaコードに含めることができるようにする必要がありますか?
すべての<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から始めてください。