昨日に引き続きSpring Frameworkを触っていきます!
今回は、Spring FrameworkとJSFの連携をやってみようと思います。
Spring Frameworkは、2.x系から確かrequestスコープとsessionスコープをサポートしているので、結構お手軽に連携できたりします。
とりあえず、やってみませふ。
早速作り始め
Webアプリケーションを新規作成します。
プロジェクト名はspringjsfにして、フレームワークにJavaServer Facesを選択します。
連携のための設定
新規作成したら、ライブラリにSpring Framework 2.5を追加します。
そして、web.xmlに以下の設定を追加します。これでWebアプリケーションでSpringが使えるようになるのに加えてrequestスコープとsessionスコープが使えるようになりまう。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>requestContextFilter</filter-name>
<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requestContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
次に、JSFの管理ビーンとしてSpringが管理してるビーンを使えるように設定します。
設定方法は、faces-config.xmlに以下の記述を追加します。
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<!-- Spring連携用 -->
<variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
</application>
</faces-config>
そして、WEB-INF/applicationContext.xmlにSpring XML 構成ファイルを作成します。Spring名前空間には、contextを追加しておきます。
applicationContext.xmlを作成したら、以下のように編集して、springjsf以下のアノテーションつきのクラスを自動登録するように構成します。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="springjsf" />
</beans>
Springの管理するビーンの作成
下準備が出来たので、プログラミングを行います。
まず、welcomeJSF.jspに対応する管理ビーンを作成します。
普通ならJSFの管理ビーンとして作成するのですが、今回はSpring用のビーンとして作成します。
普通のクラスの新規作成で、「springjsf.WelcomeJSFPage」というクラスを作成します。
作成したら、さくっと以下のように編集します。
特に説明のいらないHello worldクラスのプログラムです。
package springjsf;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
// requestスコープでwelcomeJSFという名前でSpringに登録する
@Component("welcomeJSF")
@Scope("request")
public class WelcomeJSFPage {
// 入力用
private String inputMessage;
// 出力用
private String outputMessage;
// 入力メッセージから出力メッセージを作成する
public String createOutputMessage() {
outputMessage = inputMessage + "と入力しましたね!";
return null;
}
public String getInputMessage() {
return inputMessage;
}
public void setInputMessage(String inputMessage) {
this.inputMessage = inputMessage;
}
public String getOutputMessage() {
return outputMessage;
}
public void setOutputMessage(String outputMessage) {
this.outputMessage = outputMessage;
}
}
最後に、このSpringに登録されているWelcomeJSFPageクラスを使うようにwelcomeJSF.jspを以下のように編集します。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>うぇるかむ</title>
</head>
<body>
<h:form>
入力:<h:inputText value="#{welcomeJSF.inputMessage}" />
<br />
<h:commandButton value="加工" action="#{welcomeJSF.createOutputMessage}" />
<br />
出力:<h:outputText value="#{welcomeJSF.outputMessage}" />
</h:form>
</body>
</html>
</f:view>
注目は、管理ビーンに登録されていないのにEL式でwelcomeJSFと使ってる点です。
これで、Springに登録したwelcomeJSFというビーンが使えます。
ちょっと悲しいのは、NetBeansの補間機能が働かないといったところでしょうか・・・
実行すると
画面が表示され
何か入力して加工ボタンを押すと
ちゃんと動いてることが確認できます。
以上簡単にですが、SpringとJSFの連携についてでした。