Ajaxの機能を追加する
先ほどまでの画面では、入力項目と送信ボタンを使ってサーバへ送信することまではできています。ではサーバ側での処理を行いましょう。手順としては次の2ステップになります。
- ManagedBeanにメソッド追加し、そのメソッドに処理を記述する
- ManagedBeanで追加したメソッドを起動するかをFaceletに追加する
では手順通り、最初はManagedBeanにメソッドを追加してみましょう。追加する内容は、入力されたユーザー名とパスワードの内容をもとに、resultのメッセージを作成することです。実はすでにresultの受け渡しの部分は完成していたのですが、先ほどまでの処理では特にresultに対して何も行っていなかったため、何も表示されませんでした。今回はresult値を作成し、その結果を表示してもらうようにします。
@Named(value="user")
@SessionScoped
public class SampleManagedBean {
/** Creates a new instance of SampleManagedBean */
public SampleManagedBean() {
}
String username;
String password;
String result; …(中略)…
public void action() { if ( password != null ) {
result = "ようこそ!" + username + "さん!" + "パスワードの長さは" + password.length() + "文字ですね。";
}
}
}
追加するメソッド名は任意です。今回はactionとしました。このactionメソッドでは、resultにユーザー名とパスワードの長さを返すメッセージをresultに格納する処理を行いました。
これでManagedBean側の処理は完了です。続いて、Faceletsでこのactionメソッドを呼び出す定義をしましょう。
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF+Ajaxサンプル</title>
</h:head>
<h:body>
<h:form id="form1">
名前<h:inputText id="username" value="#{user.username}">
</h:inputText>
<br />
パスワード<h:inputSecret id="password" value="#{user.password}"></h:inputSecret>
<br />
<hr></hr>
<h:commandButton id="sender" action="#{user.action}" value="送信する"> …①
</h:commandButton>
<h:outputText id="result" value="#{user.result}"></h:outputText>
</h:form>
</h:body>
</html>
実は、1の<h:commandButton>にaction属性を追加しただけです。#{user.action}にて送信するメソッドを指定しています。userは今回作成したManagedBeanのことなので、そのactionを参照する=actionメソッドを実行することになります。
