JavaのWebアプリケーションフレームワークであるJSFを仕事で使う機会があったので、
備忘録を残そうと思います。
- 使用環境
- NetBeans8.2
- JavaEE7.0
- GlassFish4.1.1
JSFでAjaxを使用する
まずは使用例として
クライアントの入力内容を入力に並行して出力するサンプルです。
【view】
<?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://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core"> <h:head> <title>Ajax Test</title> </h:head> <h:body> <h:form> <h:inputText id="txt" value="#{managedBean.value}" > <f:ajax event="keyup" render="out" /> </h:inputText> <h:outputText id="out" value="#{managedBean.value}" /> </h:form> </h:body> </html>
【ManagedBean】
import javax.enterprise.context.ApplicationScoped; import javax.inject.Named; @Named(value = "managedBean") @ApplicationScoped public class ManagedBean { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
【実行結果】
このように入力内容がテキストボックスのすぐ横に出力されます。
基本的にviewで設定しているf:ajaxタグのevent属性は、JavaScriptで扱っているイベント名からonを取り除いた文言を使用します。
render属性には更新するコンポーネントのIDを指定します。
コンバータを使用する
これらのコンバータ機能を使うことで
クライアントの入力値をJavaのint型やDate型に設定する際に、¥やカンマを除いたりする手間を省けます。
【view】
<?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://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core"> <h:head> <title>converter test</title> </h:head> <h:body> <h:form> <h:inputText value="#{ManagedBean.intval}" > <f:convertNumber pattern="#0,000" /> </h:inputText> <h:outputText value="#{ManagedBean.intval}" /> <br/> <h:inputText value="#{ManagedBean.percent}" > <f:convertNumber type="percent" /> </h:inputText> <h:outputText value="#{ManagedBean.percent}" /> <br/> <h:inputText value="#{ManagedBean.yen}" > <f:convertNumber type="currency" currencySymbol="¥" /> </h:inputText> <h:outputText value="#{ManagedBean.yen}" /> <br/> <h:inputText value="#{ManagedBean.date}" > <f:convertDateTime pattern="yyyy/MM/dd" timeZone="Asia/Tokyo" /> </h:inputText> <h:outputText value="#{ManagedBean.date}" /> <br/> <h:commandButton value="送信" /> </h:form> </h:body> </html>
【ManagedBean】
import java.util.Date; import javax.inject.Named; import javax.enterprise.context.ApplicationScoped; @Named(value = "ManagedBean") @ApplicationScoped public class ManagedBean { private int intval; private float percent; private int yen; private Date date; public int getIntval() { return intval; } public void setIntval(int intval) { this.intval = intval; } public float getPercent() { return percent; } public void setPercent(float percent) { this.percent = percent; } public int getYen() { return yen; } public void setYen(int yen) { this.yen = yen; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
【実行結果】
左が入力値で右がJava変数への設定値になります。
今回は以上です。
今後も役立ちそうな機能をアップしていきます。
コメント