プロが教えるわが家の防犯対策術!

近日、JSF(ver 1.2)でWebシステムを実装することになりJSFの勉強中のものです。
ASP.NET や PHP(Smarty) でWebシステム実装経験があります。

JSFでどう実装すれば良いのかわからないことがあり、詳しい方にお教え頂きたいと考えています・・・!


【質問概要】
JSFで最初のリクエスト時のみに動く処理はどのように実装すればよいのでしょうか?

ASP.NETでは Page_Load イベントで Page#IsPostBack を以下の例のように使用すると
最初のリクエスト時のみに動く処理を実装することができました。

---- 例 ここから -------------------------------------------
void Page_Load() {
// 毎リクエスト時に行う処理
if (!IsPostBack) {
// 最初のリクエスト時にのみ行う処理
}
}
---- 例 ここまで -------------------------------------------

JSFではこれに相当するものが無いでしょうか?


【試してみたこと】
管理Beanのコンストラクタで最初のリクエスト時にのみ行う処理ができるかと思い、
以下のtest.jspを実行し、コンソールにどのように表示されるか試してみました。

---- test.jsp ここから -------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

(中略)

<body>
<f:view>
<h:form>
<h:commandButton action="#{Test.clickTest}" value="テストボタン"></h:commandButton><br />
</h:form>
</f:view>
</body>
</html>
---- test.jsp ここまで -------------------------------------
※Test は 下記 Test.java で実装した管理Bean。スコープはrequest。

---- Test.java ここから -------------------------------------
public class Test {
public Test(){
System.out.println("コンストラクタを通っている。");
}
public String clickTest() {
System.out.println("ボタンが押された。");
return "clickTest";
}
}
---- Test.java ここまで -------------------------------------


<コンソール出力結果>
最初のリクエスト時:
コンストラクタを通っている。


テストボタン押下後:
コンストラクタを通っている。
ボタンが押された。


このことから、リクエストのたびにコンストラクタが処理されていることが分かりました。
ASP.NETの Page#IsPostBack の様なものがあれば、最初のリクエストかどうかを判別できるのですが・・・!





以上です。
上記のようなコンストラクタを使用する以外でも、なにか良い方法は無いでしょうか?
お詳しい方、何卒よろしくお願い申し上げます・・・!

A 回答 (1件)

最初のリクエストだということを示すパラメータを自分で用意すればいいのではないでしょうか?

    • good
    • 0
この回答へのお礼

ご解答ありがとうございます!

自己解決しました。
FacesContext#isPostback()があったので、これを利用します。

例:
FacesContext context = FacesContext.getCurrentInstance();
if(!context.isPostback()){
//ここに初期表示時だけの処理
}

ありがとうございました。

お礼日時:2011/04/13 15:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!