• 締切済み

JSFで最初のリクエストで動く処理を実装するには?

近日、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 の様なものがあれば、最初のリクエストかどうかを判別できるのですが・・・! 以上です。 上記のようなコンストラクタを使用する以外でも、なにか良い方法は無いでしょうか? お詳しい方、何卒よろしくお願い申し上げます・・・!

  • Java
  • 回答数1
  • ありがとう数2

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

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

p2heycocoon
質問者

お礼

ご解答ありがとうございます! 自己解決しました。 FacesContext#isPostback()があったので、これを利用します。 例: FacesContext context = FacesContext.getCurrentInstance(); if(!context.isPostback()){ //ここに初期表示時だけの処理 } ありがとうございました。

関連するQ&A

  • JSFでJavaScriptを使用するには?

    JSF初心者の為、頓珍漢な質問で恐縮です。 以下のようなJSFタグを使用したJSPがあるとします。 <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <html> <head> </head> <body> <f:view> <h:form> <h:inputText id="number" value="#{myBean.message}"/> <h:commandButton action="#{myBean.doHoge}" value="送信"/> </h:form> </f:view> </body> </html> このJSPに、以下の処理をJavaScriptで実装したいと思っています。 「送信ボタンのOnClickイベントでinputTextに入力された文字をJavaScriptのAlert()関数でポップアップ表示する。」 JSFタグがなければなんてことのない処理ですが、JSFタグを使用している状況でどのようにJavaScriptを使用していいものなのかがよくわかりません。 上記の処理はどのように実装すればいいのでようか? JSFでJavaScriptを使用する方法について参考になるサイトがあれば教えてください。

    • ベストアンサー
    • Java
  • JSFについて

    JSFを使おうとしてるのですが <%@page contentType="text/html; charset=Shift_JIS"%> <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <html> <head> <title>jsfsample1</title> </head> <body bgcolor="#ffffff"> <h1>JSF サンプル</h1> <f:view> <h:form> <h:outputText value="ようこそJSFへ" /> <h:inputText /> <h:commandButton value="click"/> </h:form> </f:view> </body> </html> 上記の10行目<f:view>でエラーが出るのですが何ででしょうか?? ライブラリやweb.xmlは本を見て所定の場所にコピーしました。

    • ベストアンサー
    • Java
  • h:commandButtonのアクション

    現在jsf Beanを使ったwebアプリを書いています。 h:commandoButtonで定義したテストボタンを押下後 ページのリロードを行うと 情報の再送信を求めるダイアログが表示されます。 ここで「はい」を選ぶとテストボタン押下の処理が再び勝手に走ります。 テストボタン押下前にはリロードしても何も動作はしません。 もしかして初歩的な所で間違っているかも知れませんが お気づきの点有りましたらお教え下さい。 以下がサンプルプログラムと動作時の流れです。 ◎test.jsp----------------------------------- <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> (中略) <body> <f:view> <h:form>  <h:commandButton action="#{test.action}" value="テスト"/></h:form> </f:view> </body> </html> ◎test.jsp----------------------------------- ※test は スコープをsessionで実装した管理Beanで下記 Test.java。 ◎Test.java----------------------------------- public class Test {  public Test(){  }  public String action() {   System.out.println("アクション");   return "action";  } } ◎Test.java ここまで ------------------------------------- ページ表示  ↓ テストボタン押下  ↓ アクションと表示  ↓ ページのリロードを行う  ↓ 情報の再送信を求めるダイアログで「はい」を選択  ↓ テストボタンを押していないのにアクションと表示される。 ページ表示  ↓ ページのリロードを行う  ↓ 情報の再送信を求めるダイアログで「はい」を選択  ↓ 異常なし

    • ベストアンサー
    • Java
  • strutsでフレームの分割ができません。

    strutsで、 http://struts.wasureppoi.com/taglib/03_frame.html を見ながらフレームの分割を下記のように行おうとしていますが、エラーが表示されます。 ソース ---- <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-nested" prefix="nested" %> <html:html> <head> <title>テスト</title> </head> <frameset cols="30%,*"> <html:frame page="l.jsp"/> <html:frame page="r.jsp"/> </frameset> </html:html> ---- エラーメッセージ ---- HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: Exception in JSP: /index08.jsp:13 10: <title>テスト</title> 11: </head> 12: <frameset cols="30%,*"> 13: <html:frame page="l.jsp"/> 14: <html:frame page="r.jsp"/> 15: </frameset> 16: </html:html> Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) 原因 java.lang.NullPointerException org.apache.struts.taglib.TagUtils.pageURL(TagUtils.java:1070) ---- 別のページを見ると、 <html:frame page="l.jsp" name="hidari"/> とname属性を宣言しているようですが、同様に記述してみると、スコープが無いとエラーが出てしまいます。 環境は、  WindowsXP  Eclipse3.3  Tomcat5.5  struts-1.3.8  JDK1.5 です。 どのように記述すべきか、検索してもヒットしなかったので、恥かしながらここで質問させて頂く事にしました。 どのように直すべきか、分かる方がいらっしゃいましたらご教授頂けないでしょうか?  また、オススメのStrutsの本がありましたら、こちらも教えて頂けたら幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • charsetについて教えてください。

    StrutsのJSPで開発しています。 ------------------------ <%@ page contentType="text/html;charset=Windows-31J" language="java" %> <%@ taglib uri="struts-bean.tld" prefix="bean" %> <%@ taglib uri="struts-html.tld" prefix="html" %> <%@ taglib uri="struts-logic.tld" prefix="logic" %> <%@ taglib uri="c.tld" prefix="c" %> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Pragma" CONTENT="no-cache"> <META http-equiv="Content-Style-Type" content="text/css"> ------------------------ 以上のように記述した場合、 JSP側のcharsetとMETAタグのcharsetでは、 どちらが優先度が高くなるのでしょうか? 教えてください。

  • Functionsタグライブラリの使い方について

    はじめまして。Javaの初心者です。 参考書を読みながらタグの学習をしているのですが、 どうしてもわからないことがあります。 それは、参考書には、例えば、以下のようなコード のように記述して実行すると、 ************************************************* <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <html> <head> <title>Test</title> </head> <body> <c:set var="a" value="aaaaa"/> <p>${fn:toUpperCase(a)}</p> </body> </html> ************************************************* AAAAAと表示されるというようなことが書かれていますが、実際にコードを実行させてみると、 「${fn:toUpperCase(a)}」が表示されてしまいます。 どのようにすれば、参考書のような実行結果が得られるのでしょうか? 現在の実行環境は、Tomcat5.5.17 jdk1.5.0_06を使用しています。どうか教えてください。お願いします。

    • ベストアンサー
    • Java
  • NullPointerException

    Strutsでjspを書きました。下のソースなのですが、どうやらlinkタグがうまくいっていないようなのです。NullPointerになってしまいます。どこが悪いか教えていただけませんか?web.xmlもちゃんと書いてあるし、struts-config.xmlもちゃんと書いたのですが・・・。お願いします。 <%@page contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <html:html> <head> <title>top</title> </head> <body> <div align="left"> <hr> <h1><font color="#20B2AA">■ <メニュー画面> ■</font></h1> <hr> <html:link forward="shoppingInitial/Entry"><h3> 登録 </h3></html:link> <html:link forward="shoppingInitial/Browse"><h3> 見る </h3></html:link> </body> </html:html>

    • ベストアンサー
    • Java
  • Struts 1.3 でbeanタグが認識されない

    Struts初心者です。 Struts1.3で以下のようなJSPを作成していますが、 "bean:write"のところで、"bean"に対応するtaglibディレクトリが存在しないかTLDファイルが見つかりません。 とエラーになります。 <%@ page contentType="text/html;charset=Windows-31J" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> ・ ・ ・ <html:html> <head> <title>○○○○○○○○</title> </head> <body> <h1>○○○○○○○○</h1> ●●●●<bean:write name="xxxx" property="id" />! </body> </html:html> "html"の方はエラーになりません。 ケアレスミスのような気がしていますので、どなたか教えていただけると嬉しいです。

  • Struts、Iterateタグの使い方

    StrutsのIterateタグを使おうとしているのですが、 jsp.error.unterminated.tagというエラーが出てしまい ます。Iterateタグの使い方に問題があると思うのです が、どのように対処すれば良いのかが分かりません。ご 存知の方、教えて頂けませんでしょうか。お願いしま す。 <%@ page language="java" import="java.util.Collection, aloha.business.UserBO" %> <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> <jsp:include page="header.jsp" flush="true" /> <% UserBO UserBO = new UserBO(); Collection col = userBO.findAllUser(); %> <table><tr> <logic:iterate id="user", name="col", length="5"> </logic:iterate>

    • ベストアンサー
    • Java
  • sturtsとJSF

    こんばんは。jsp、struts2の勉強をしているのですが、理解出来ないところがあるのでご教授願います。 以下のようなサンプルソースがあります。 ******************************** <!-- 1 <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags" %> 3 <html> 4 <body> 5 <s:form> 6   <s:radio name="cmd_radio" list="#{'1':'おはよう','2':'こんにちは','3':'こんばんは'}"> 7 <s:property value=”%{message}”/> 8 <s:submit method="show" value="クリック"/> 9 </s:form> 10 </body> 11 </html> --> ******************************** まず、6行目のlist="#{'1':'おはよう','2':'こんにちは','3':'こんばんは'}、#{}はJSFのEL式と調べたら書いていたのですが、StrutsタグでJSFが併用できるのと言うことでしょうか?そしてこのタグの動きは#{}の中の要素をループさして、HTMLタグを生成していると言う認識で良いのでしょうか。 もう1点7行目のvalue=”%{message}”ですが、変数messageはアクションクラスのメンバ変数で、showメソッドの中で選択されたラジオボタンの値がセットされます。messageのsetter、getterメソッド共にありますが、showメソッドでは message = "選択されたラジオボタンの値"; となっています。 value=”%{message}”ではなく、name = "message" にして、setMessage("選択されたラジオボタンの値"); としてはだめなのでしょうか。それと、%{}はstrutsのEL式なのでしょうか。 周りにstrutsに詳しい方がおらず、困っています。 初歩的な事で申し訳ありませんが、宜しくお願いします。