近日、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 の様なものがあれば、最初のリクエストかどうかを判別できるのですが・・・!





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

このQ&Aに関連する最新のQ&A

A 回答 (1件)

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

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

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

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

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

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

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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q()ってどういう意味ですか?

()ってどういう意味ですか?

友人がTwitterなどで文章の途中に()のようにカッコの間に何もいれず続けて打っていたのですがいったいどういう意味で使っていたのでしょうか?

Aベストアンサー

カッコ ( 格好 ) つけただけ


で意味なし

Qjava & JSF1.2 についての質問です。

java & JSF1.2 についての質問です。
私は、JavaとJSFを勉強中のプログラマです。C,C++,C#,php,SQL 等の技術的知識は多少あります。
しかし、Java と JSF については初心者です。

<質問概要>
JSFの勉強のために、簡単な電子掲示板プログラムを開発しているのですが、
クエリー(SQL)の結果を JSF の <h:dataTable> に関連付けて表示する処理がうまく動きません。
クエリーの結果は8レコードのデータを返しているのに、<h:dataTable>には一件も表示されないのです。エラーも出ません。

<開発環境>
OS:WindowsXP SP3
JDK 1.5.0
Apache Tomcat v6.0
JSF 1.2(Apache Myfaces JSF Core-1.2 API 1.2.9)

<問題のソースコード>
[BbsBeanMain.java] Bean のソースコード

public Connection con = null;
public Statement state = null;

private ResultSet rsList;

public ResultSet getRsList() {
this.setRsList();

return this.rsList;
}

public void setRsList() {
try{
Class.forName("com.mysql.jdbc.Driver");
this.con = DriverManager.getConnection("jdbc:mysql://localhost/bbs", "root", "mtdvd1208");
this.state = this.con.createStatement();
String strSQL;
strSQL = "select Thread_ID, Thread_Title, Thread_Date from T1_Thread ";
strSQL += "order by Thread_Date desc ";

this.rsList = this.state.executeQuery(strSQL);
}
catch(Exception ex){
System.out.println("Error BbsBeanMain.setRsList ex=" + ex);
}
}

[main.jsp] JSP のソースコード
<h:dataTable id="ttbl1" value="#{BbsBeanMain.rsList }" var="rs"
headerClass="ttbltr" columnClasses="ttblcol1,ttblcol2" >
<h:column>
<f:facet name="header">
<h:outputText value="スレッド" />
</f:facet>
<h:form id="threadnamefrm">
<h:inputHidden id="threadid" binding="#{BbsBeanMain.ihThreadID }"
value="#{rs.Thread_ID }" />
<h:commandLink action="#{BbsBeanMain.mDispThread }">
<h:outputText id="id1" value="#{rs.Thread_Title }" />
</h:commandLink>
</h:form>
</h:column>
</h:dataTable>

<h:messages />

<ソースコード解説>
 上記 ResultSet オブジェクトの内容を、ArrayList に乗せ変えてやると正常に表示します。
 私が知りたいのは、なぜ ArrayList で動くものが、ResultSet では動かないのか?という点です。
 ヒントだけでも結構です。何か知っている方がいらっしゃれば、教えてください。
 お願いします。
 質問文の最大文字数が少なすぎて、正常に動作する ArrayList 版のソースコードが載せられないのが残念です。

java & JSF1.2 についての質問です。
私は、JavaとJSFを勉強中のプログラマです。C,C++,C#,php,SQL 等の技術的知識は多少あります。
しかし、Java と JSF については初心者です。

<質問概要>
JSFの勉強のために、簡単な電子掲示板プログラムを開発しているのですが、
クエリー(SQL)の結果を JSF の <h:dataTable> に関連付けて表示する処理がうまく動きません。
クエリーの結果は8レコードのデータを返しているのに、<h:dataTable>には一件も表示されないのです。エラーも出ません。

<開発環境>
OS:Windows...続きを読む

Aベストアンサー

h:dataTableタグはコレクション(List,配列など)のデータを
表にして表示するUIコンポーネントですからリスト型の物でないと
表示できないかと思います。

参考URL:http://www.wakhok.ac.jp/~tomoharu/jsf2004/text/index_c7.html#doc1_id795

Q()の意味は?

オケの楽譜(パート譜)に(SOLO)とあるとき、()に何か意味はありますか?
パートで1人だけ演奏してください、という意味でいいんですかね?

Aベストアンサー

そのとおりです。
よく曲の途中で他のパートがシーンとなってソロの人が1人だけ立って演奏したりします。
すごく目立ちますがソロパートは気分いいです。

Qストリートビューの実装方法と、アマゾンのトップページにあるリング状の選択ボックスの実装方法について

いつもお世話になっています。
過去ログをあさってみたのですが見つけられなかったので質問します。

二点あります。

1.googleストリートビューのような、360度回転できる機能はどのライブラリを用いて実装されているのでしょうか?複数の写真を撮り、Ajaxで読み込み表示しているのだろう、ということはわかるのですが、写真と写真のつなぎ目がないし、単に写真をつないだだけではなくて、写真画像を変形させてつないでいるようにも見えます(いろいろ調べてみると、この機能自体はずいぶん昔からあったようですね。ホテルの内装とかを見やすくするために導入されていたりしたようです)。

2.アマゾンのトップページをなんどかリロードすると、奥行きのあるドーナツ状に商品画像が並んでいて、それを回転させることができます。
これはどのライブラリで実現しているのでしょうか?
ソースを見ると、該当する場所は
<div class="asinTextBlock">
<p class="seeMore">
<span class="carat">
のようになっている?ようなのですが、追いきれません。。

まだまだ未熟なのですが、志を高く勉強して行きたいので、どのライブラリで実現できるのか、またはライブラリなしで可能なのか、アマゾンオリジナルのライブラリを使用しているのか、、教えてください。

よろしくお願いいたします。

いつもお世話になっています。
過去ログをあさってみたのですが見つけられなかったので質問します。

二点あります。

1.googleストリートビューのような、360度回転できる機能はどのライブラリを用いて実装されているのでしょうか?複数の写真を撮り、Ajaxで読み込み表示しているのだろう、ということはわかるのですが、写真と写真のつなぎ目がないし、単に写真をつないだだけではなくて、写真画像を変形させてつないでいるようにも見えます(いろいろ調べてみると、この機能自体はずいぶん昔からあったよう...続きを読む

Aベストアンサー

ちょっといじっているうちに、はまってきた!
<html>
<head>
<style>
</style>
<script>
var x=[],y=[],b=[],o=[],n=[];
var sp=1;
setInterval(c,50);
window.onload=function(){
for(i=0;i<=360;i++){
zx=Math.sin(i*3.14159/180)*300;
zz=Math.cos(i*3.14159/180)*300;
zy=-150;
zk=(1000-zz)/800;
x[i]=251-zx/zk;
y[i]=-zy/zk-80;
b[i]=((700+zz)/1000)*120|0;
}
o=document.getElementById('a').getElementsByTagName('img');
p=(360/o.length)|0;
for(var i=0,m=o.length;i<m;i++){
o[i].style.position='absolute';
o[i].style.top=y[p*i];
o[i].style.left=x[p*i];
n[i]=p*i;
}
}

function c(){
for(i=0;i<o.length;i++){
o[i].style.left=x[n[i]];
o[i].style.top =y[n[i]];
o[i].style.width =b[n[i]];
o[i].style.height=b[n[i]];
o[i].style.zIndex=b[n[i]];
n[i]=(sp+n[i])%360;
}
}

</script>
</head>
<body>
<div id="a" style="width:600px;height:230px;border:1px #080 solid;position:absolute;top:50px;">
<input type="button" value="回転" onClick="sp=1;">
<input type="button" value="停止" onClick="sp=0;">
<img src="./img/0.gif" width=120" height="120" alt="ぐ~ぐるに!" onClick="location.href='http://www.google.co.jp/webhp?complete=1&hl=ja'">
<img src="./img/1.gif" width=120" height="120" alt="2">
<img src="./img/2.gif" width=120" height="120" alt="3">
<img src="./img/3.gif" width=120" height="120" alt="4">
<img src="./img/4.gif" width=120" height="120" alt="5">
<img src="./img/5.gif" width=120" height="120" alt="6">
<img src="./img/6.gif" width=120" height="120" alt="7">
<img src="./img/7.gif" width=120" height="120" alt="8">
<img src="./img/8.gif" width=120" height="120" alt="9">
<img src="./img/9.gif" width=120" height="120" alt="10">
</div>
</body>
</html>

ちょっといじっているうちに、はまってきた!
<html>
<head>
<style>
</style>
<script>
var x=[],y=[],b=[],o=[],n=[];
var sp=1;
setInterval(c,50);
window.onload=function(){
for(i=0;i<=360;i++){
zx=Math.sin(i*3.14159/180)*300;
zz=Math.cos(i*3.14159/180)*300;
zy=-150;
zk=(1000-zz)/800;
x[i]=251-zx/zk;
y[i]=-zy/zk-80;
b[i]=((700+zz)/1000)*120|0;
}
o=document.getElementById('a').getElementsByTagName('img');
p=(360/o.length)|0;
for(var i=0,m=o.length;i<m;i++){
...続きを読む

Qこの赤いペンで囲まれた( )は省略してもしなくてもいいよって意味ですか?

この赤いペンで囲まれた( )は省略してもしなくてもいいよって意味ですか?

Aベストアンサー

見た感じ、1行上のShe の後ろに挿入せよ、ではないですか?

Qリクエスト処理スレッド

アプリケーションサーバーで
Webアプリを動かし、
リクエスト処理スレッドが復帰しない場合、
つまり数分間ビジーな場合、エラーが出ることを確認しなければならなくなりました。

単にビジーになればいいのかと、
whileで終了しないループを作ってみたのですが、
それではリクエスト処理スレッドにはならなく、タイムアウトにはなったものの、目的のエラーが出てくれませんでした。

リクエスト処理スレッドがビジーとなるようなプログラムをどう組めばいいか教えてください。

ヒントだけでも助かります

Aベストアンサー

java.lang.Thread#sleepで
タイムアウトになるまで
スレッドを寝かせておく…
ってのはダメですか?

Q||とD()の記号の意味が分かりません

確率の勉強をしていたらD(P||P^*)という式が出てきました.
このときのD()と||はどういう意味があるのでしょうか?

Aベストアンサー

同じ記号でも、文脈によって違う意味に使い廻しされるものです。
記号が何を表しているのかは、出典にあたる他はありません。
その記号に出逢った文献の、少し前のほうを読み返してみてください。

確率の勉強中とのことですが、量子論に使う記号のようにも見えます。
出典そのものよりも、それに付いてある文献表に従って
参考文献を読むほうがよいのかもしれません。

Q「何も処理をしない」を実装する方法

キーボードのEnterキーを押した際、
何も処理をせず現在表示している画面に戻す
ということを実装したいのですが、どのように記述したらよいのか分かりません。

私が作りましたソースは、
window.document.onkeydown = keytech;
function keytech(){
if( event.keyCode == 13 ){
  history.go(0);
}else {
  // Nothing
}
です。

このソースで「Enterキー」を押した時というイベントは取れています。
しかし、「history.go(0);」にて、
「現在表示しているページを再度読み込む」をしてしまいます。
それでは、これまでに入力したフォームのテキストの情報などが、
消えてしまいます。
入力してもらった情報を消さずに何も処理をしないということは可能でしょうか?

Aベストアンサー

どの時点のエンターを無効にしたいのかわかりませんが
formのテキスト入力中のエンターでしたら
サブミットするのが仕様です。

その辺を調整したいのであれば、focusしたときに
formのonSubmitをreturn falseにして、blurしたとき
にクリアすればいけるかもしれません。

QC言語のprintf()関数の「f」の意味

標準入出力関数のprintfの意味が分かりません。
「print」は印刷だと思いますが、「f」は何なのでしょうか?

詳しい方がいましたら、よろしくお願いします。

Aベストアンサー

書式を指定するフォーマットの「f」だったハズ。

printf ‐ 通信用語の基礎知識
http://www.wdic.org/w/TECH/printf

Qデータを保存しておく処理を実装したい。

javaを勉強している者です。Swingを使ってメーラを作っています。勉強に使っている本は「EclipseによるJava実用プログラミング」と「Java GUIプログラミング(1)」です。

一度受信したメールを保存しておく方法に、全く見当がつきません。普通そういった処理はどうやるものなのでしょうか?また、それを勉強するにあたりお勧めの書籍、ウェブページがあれば、教えていただきたいです。

よろしくお願いします。

Aベストアンサー

メーラーということは、ローカルアプリケーション実行ですよね。
データの保存といったら、ファイル保存でしょう。
ローカルアプリケーション実行なら、相対パス指定で、実行ディレクトリ近辺に問題なく保存できるでしょう。
お持ちの本にも「ファイル読み書き」の章があると思いますので、まずじっくり読んでファイル操作の基本を覚えるところから始めましょう。
いくつか方法論があるかと思いますけど、基本的は、try catch の中にいれること、Stream系のインスタンスを作成して、Buffered系インスタンスに渡して読み書きという手順を踏むことなどです。


人気Q&Aランキング

おすすめ情報