読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

JSF2.2ではCDI管理対象BeanでViewScopedが使えるっぽい!!

Java EE 7 JSF CDI

間違ってたら指摘下さい(^^;

Java EE7が出てLive Webcastをみたとき、CDIで増えたスコープは

  • TransactionalScoped
  • FlowScoped

と紹介されていて、なんでViewScopedは入らないんだろう…と不思議でした。

自分がJava EE 6を勉強し始めて、管理対象Bean(BackingBean)をどう作るか、具体的には、JSF管理対象を使うか、CDI管理対象を使うか悩んでいたとき(CDI管理対象にすれば色々楽できそうだから使いたいけど、JSFのViewScopedがすごく欲しい、という感じだった…)、以下のサイトがとても有益でした。

で、上記ページ内でも書かれているように、CDIの標準でViewScopedはないため、どうしても欲しい場合は独自に定義するなどが必要でした。

で、今回もないのかーと思っていたら以下のサイトを見つけ

でもこの記事古いんだ…と思いつつ、NetBeans7.3.1を立ち上げて書いてみたら、なんか2つ出てきた!
f:id:kikutaro777:20130623010223j:plain

試しに以下書いてみました。

import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.faces.view.ViewScoped;

/**
 *
 * @author kikutaro777
 */
@Named(value = "confirmScopeBean")
@ViewScoped
//@RequestScoped
public class ConfirmScopeBean implements Serializable{

    private int count;

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
    
    public void countUp(){
        count++;
    }

    public ConfirmScopeBean() {
    }
}

ビューは

<?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">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <h:outputLabel value="#{confirmScopeBean.count}" />
            <h:commandButton value="カウント" action="#{confirmScopeBean.countUp()}" />
        </h:form>
    </h:body>
</html>

ちなみにRequestScopedだとボタンを押して1度カウントされるだけの繰り返しです。
(1回のリクエストごとに消えるから)
f:id:kikutaro777:20130623010551j:plain

で、ViewScopedにすると
f:id:kikutaro777:20130623010610j:plain

ちゃんとカウントアップしてる!
おお、CDI管理対象BeanでViewScopedになってる!!!(っぽい)
※ぽい、とつけたのは、このサンプルでは厳密なViewScopedの確認とは言えないため;

で、Java EE 7のJavaDocをみにいってみると
http://docs.oracle.com/javaee/7/api/

f:id:kikutaro777:20130623011051j:plain

上記はキャプチャの一部なので、実際ページを見るのをおススメしますが、説明読む限りCDIでViewScopedで間違いないかと(^^;

これは超嬉しいです!!
なお試した環境は、NetBeans7.3.1でWebアプリケーションを作成し、Java EE 7,、GlassFish4.0を選んで作ったものです。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村