EclipseでJSF2.2学習記 画面遷移

EclipseでJSFの学習をしています。

今回は画面遷移を実施しました。

環境

  • Eclipse4.3
  • Java 1.8.0_40
  • GlassFish4.1
  • JSF2.2

学習内容

画面1 ⇒ Java(サーバ処理) ⇒ 画面2

という単純な画面遷移方法を学習しました。

画面1

jsf2

画面2

jsf3

プロジェクト構成

jsf1

画面1 index.xhtml


<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
</h:head>
<h:body>
<h:form>
<div>
<h:commandButton action="#{sampleBean.login}" value="ログイン" />
</div>
</h:form>
</h:body>
</html>

java:SampleBean.java


package bean;

import java.io.Serializable;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class SampleBean implements Serializable {
  public String login() {
    System.out.println("Hello World");
    return "resultPage.xhtml";
  }
}

画面2 resultPage.xhtml


<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
</h:head>
<h:body>
画面遷移したよ
</h:body>
</html>

ポイント

h:commandButtonのaction属性に呼び出したいクラスの先頭小文字.メソッド名をEL式(#{}のこと)に指定すればOKです。java側の戻り値は呼び出したい画面を指定します。

以下嵌った点

SampleBean.javaの@RequestScopedは「javax.enterprise.context.RequestScoped」を利用しないと画面遷移時にエラーが発生します。

type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.el.PropertyNotFoundException: /index.xhtml @8,71 action="#{sampleBean.login}": Target Unreachable, identifier 'sampleBean' resolved to null

root cause

javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /index.xhtml @8,71 action="#{sampleBean.login}": Target Unreachable, identifier 'sampleBean' resolved to null

root cause

javax.el.PropertyNotFoundException: /index.xhtml @8,71 action="#{sampleBean.login}": Target Unreachable, identifier 'sampleBean' resolved to null

GlassFish4.1には標準でCDI-APIが付属していないようなので下記サイトから個別にjarファイルをダウンロードしてパスを通しました。

http://mvnrepository.com/artifact/javax.enterprise/cdi-api

ちなみにダウンロードしたのはcdi1.0です。

GlassFish4.1の問題なのか、それともEclipseで開発することが問題なのか、そもそもそういうポリシーなのか分かっていませんが、JavaEE標準の機能を利用したいのに必要なjarファイルが無いなんて面倒ですね。

スポンサーリンク
スポンサードリンク
スポンサードリンク

シェアする

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

フォローする