SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

軽量・高速・安価で、安定性と信頼性も兼ね備えたWebSphere Application Serverの「Liberty Core」を使ってみた

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード PostalCodeJSF.zip (2.1 MB)
ダウンロード PostalCodeService.zip (2.1 MB)
ダウンロード PostalCodeServlet.zip (2.1 MB)

5. JSF+Facelets+CDIを利用する

 続いて、JavaServer Faces(JSF)を使ったアプリケーションを動かしてみよう。プロジェクト名は「PostalCodeJSF」とした。開発に必要なライブラリはLiberty Profileに含まれているので、プロジェクトとしての追加の設定は特に必要ないが、サーバー側の設定には少し手を加える必要がある。サーバーマネージャーにおいて「サーバー構成」をダブルクリックしてserver.xmlを開き、図5.1のように「フィーチャーマネージャー」を表示する。

図5.1
図5.1

 ここで右側の[追加]ボタンをクリックして、使用したいフィーチャーを選択すれば、サーバー上でその機能が有効になる。今回はJSFを使いたいので、jsf-2.0を選択すればよい。また、せっかくなので、CDI(Context and Dependency Injection)も使えるようにしておこう。なお、ここには表示されていないが、Servlet 3.0やJSON、Bean Validationはデフォルトで有効になっている(下部のShow implicitly enabled featuresをチェックすると表示される)。

図5.2
図5.2
図5.3
図5.3

 PostalCodeクラスは先ほどの例のものが流用できるが、CDIを使うので、@Namedや@PostConstruct、スコープを決める@ApplicationScopedといったアノテーションを追加する。

リスト5.4 PostalCode.java(抜粋)
@Named
@ApplicationScoped
public class PostalCode {

    private Map<String, String> postalCodeMap = new HashMap<>();
    
    @PostConstruct
    public void init() {
        // 省略
    }
        
    public String get(String postalcode) {
        // 省略
    }
    
}

 ManagedBeanでは、@InjectアノテーションでPostalCodeオブジェクトをInjectする。プロパティは郵便番号と住所に対応したcodeとaddressの2つ。住所の取得はgetAddressFromCode()メソッドで行う。

リスト5.5 PostalCodeController.java(抜粋)
@Named
@SessionScoped
public class PostalCodeController implements Serializable {

    private static final long serialVersionUID = 1L;

    String code;
    String address;
    
    @Inject
    PostalCode postalCode;
        
    public void getAddressFromCode() {
        this.address = postalCode.get(this.code);
    }

    // Getter/Setter省略
    
}

 Webページは、Faceletsを利用すればHTMLに近いタグ構成で作ることができる。

リスト5.6 index.xhtml
<?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" 
      xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Sample JSF</title>
</head>
<body ui:id="body">

  <p style='font-size:large'>郵便番号を入力してください。</p>

  <form jsfc="h:form" ui:id="form">
    <input jsfc="h:inputText" type="text" ui:value="#{postalCodeController.code}" size="50" />
    <input jsfc="h:commandButton" type="submit" value="送信" ui:action="#{postalCodeController.getAddressFromCode()}" />
    <p style='font-size:x-large'>住所: #{postalCodeController.address}</p>
  </form>

</body>
</html>

 その他、beans.xmlやweb.xml、faces-config.xmlがWebContentsのWEB-INF以下に必要。準備ができたら、先ほどと同じようにサーバー上で実行すればプレビューできる。server.xmlの設定を変更したが、これも保存時に自動で反映されるので、サーバーを再起動する必要はない。

次のページ
6. JAX-RSを利用する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

杉山 貴章(スギヤマ タカアキ)

有限会社オングスにて、Javaを中心としたソフトウェア開発や、プログラミング関連書籍の執筆、IT系の解説記事やニュース記事の執筆などを手がけている。そのかたわら、専門学校の非常勤講師としてプログラミングやソフトウェア開発の基礎などを教えている。著書に『Javaアルゴリズム+データ構造完全制覇』『Ja...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7697 2014/04/01 13:59

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング