- PR -

JSF web.xmlの書き方

投稿者投稿内容
しま太郎
常連さん
会議室デビュー日: 2006/08/22
投稿数: 39
投稿日時: 2006-08-23 14:19
アドバイス、ありがとうございます!

引用:

このときコンテキストパスは"/faces/faces"になっているのではないかと思います。
だからurl="image/rogo.gif"が見つからないのでは?


現在のコンテキストパスは教えていただいた方法で調べてみた所、
 /website
でした。

引用:

#{touroko.message}が取れないのは、tourokuをマネージドビーンにしていないからです。


faces-configで下記のように設定しています。
 <managed-bean>
  <managed-bean-name>touroku</managed-bean-name>
  <managed-bean-class>account_touroku.touroku</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
こちらも説明不足でした。スミマセン。。

引用:

マネージドビーンのメソッドの中で使いたいのであれば、
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("userID")
のように取り出すことができます


この場合、こちらを記入するサーブレットtouroku.javaはweb.xmlに登録しなくてもよろしいのでしょうか?
また、touroku.javaはdoGet()を使わず、通常の[private String xxx(){ …return zz}]という形にし、
 http://website/account_touroku/touroku?userID=XXX
で値を渡せるのでしょうか?
上記で試した所、[HTTPステータス 404]となりました。。
(意図を正しく理解できていない場合には申し訳ありません。。)
サーブレットでURLから値を受け取るにはweb.xmlへの記述がなければ、やはりダメなのでしょうか。。

大変ご面倒をおかけいたしますが、ご教授お願いいたします。

[ メッセージ編集済み 編集者: しま太郎 編集日時 2006-08-23 15:00 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-08-23 14:52
引用:

よしだひろゆきさんの書き込み (2006-08-23 13:19) より:
次にtouroko.doGetの中で"/faces/jsp/tourokuNext.jsp"にdispatchしています。
これは/faces/faces/jsp/tourokuNext.jspへのdispachになるのではないかと思います。


/から指定されているので、コンテキストルート(website)からの相対パスになるのでは?

引用:

という定義にしたがってjavax.faces.webapp.FacesServletによって処理されます。


フォワードでもこのように動作しましたっけ?

引用:

という定義にしたがってjavax.faces.webapp.FacesServletによって処理されます。
このときコンテキストパスは"/faces/faces"になっているのではないかと思います。


リダイレクトではなくフォワードですから、ブラウザから見たカレントのURLは
http://website/faces/touroku?userID=XXXになっているのではないですか?
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-08-23 18:54
引用:
faces-configで下記のように設定しています。


なるほど。ということは、tourokuのインスタンスが二つできています。
一つはTomcatがweb.xmlの指定にしたがって作るものでdoGetが呼ばれます。
もう一つはJSF(FacesServlet)がfaces-config.xmlの指定にしたがって作るものでgetMessageが呼ばれます。
インスタンスが違うのでインスタンス変数を当然共有できていません。

実際にやりたいのがパラメタを参照することなのであれば、昼間に私が投稿した方法で実施するのが普通です。touroku.doGetで他に何かしたいのでしょうか?
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-08-23 19:01
引用:
/から指定されているので、コンテキストルート(website)からの相対パスになるのでは?


そうでした! でも、しま太郎さんは"/website"になっていると言っていますね。何か変ですねえ。

引用:

という定義にしたがってjavax.faces.webapp.FacesServletによって処理されます。
フォワードでもこのように動作しましたっけ?


そうです。FacesServletが呼ばれていないと、FacesContextのインスタンスができていないので、f:viewタグの処理でJasperException: Cannot find FacesContextになります。(すみません、先の投稿で「ヌルポになる」と書きましたが正しくはこのエラーです)
で、エラーが起きないでまがりなりにも表示されているということはFacesServletが呼ばれているということです。
t_yamo
常連さん
会議室デビュー日: 2006/02/16
投稿数: 21
投稿日時: 2006-08-23 19:42
これまでの書き込みには「現象に対する話題」と「今回の要件への対応方法の話題」の両方があるため、しま太郎さんが混乱しているようにも見受けられます。
ここでは後者のみを記します。

まず、おかしな実装になっているところは「自前ServletとJSFを混在している」というところです。
JSFを利用する場合、Servletは「FacesServlet」のみにしてください(場合によっては別途用意することも考えられますが、今回の要件では不要です)。

そのうえで、よしだひろゆきさんが「2006-08-23 13:19」の末尾に書かれた方法でデータを取得すれば、すっきりと要件を満たせるかと思います。


[ メッセージ編集済み 編集者: t_yamo 編集日時 2006-08-23 19:43 ]
しま太郎
常連さん
会議室デビュー日: 2006/08/22
投稿数: 39
投稿日時: 2006-08-24 10:38
アドバイス、ありがとうございます!
t_yamoさん、サーブレットはJSFサーブレットだけにすれば良かったのですね。。
「自前ServletとJSFを混在している」…な…なるほどです…
引用:

よしだひろゆきさんの書き込み (2006-08-23 18:54) より:

実際にやりたいのがパラメタを参照することなのであれば、昼間に私が投稿した方法で実施するのが普通です。touroku.doGetで他に何かしたいのでしょうか?


このクラスで行いたいことは他にもいくつかあるのですが(今はまだテスト段階なので行ってはいないのですが)、私がdoGet()にした理由は、URLのパラメータgetがこれでのみしか行えないと思っていたからです。
通常のJSFサーブレットで行えるのでしたら断然そちらの方が希望です!
そこで、よしだひろゆきさんのアドバイスにしたがって下記のように書いてみました。。

web.xml------------------------------------------------------------

<web-app>
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup> 1 </load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>/faces/*</url-pattern>
 </servlet-mapping>
</web-app>
-------------------------------------------------------------------

faces-config-------------------------------------------------------

 <managed-bean>
  <managed-bean-name>touroku</managed-bean-name>
  <managed-bean-class>website.faces.account_touroku.Touroku/managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>

-------------------------------------------------------------------

Touroku.java-------------------------------------------------------
package faces.account_touroku;

import javax.faces.context.FacesContext;

public class Touroku {

 private String tourokuAction(){

   String outCome = null;   

   //パラメータ取得
   String userID;
   userID = (String) FacesContext.getCurrentInstance().getExternalContext().
         getRequestParameterMap().get("userID");

   System.out.println("●="+userID);

   //遷移
   return outCome;
 }
}
-------------------------------------------------------------------

アドレスバーに
 http://website/faces/account_touroku/Touroku?userID=aaa@a
と打ち込んだところ、結果は[HTTP 404]でした。
 http://website/faces/touroku?userID=aaa@a
もやってもましたが、やはり[HTTP 404]です。。

また、その後の遷移方法も悩み中です。
faces-configに通常の場合

 <navigation-rule>
  <from-view-id>/jsp/XXX.jsp</from-view-id>
   <navigation-case>
    <from-outcome>success</from-outcome>
    <to-view-id>/jsp/nextXXX.jsp</to-view-id>
   </navigation-case>
 </navigation-rule>

と書いていましたが、サーブレットから遷移する場合はどのように書くべきなのでしょうか。。
<from-view-id>はJSPを書くのですよね??

初心者で理解が遅いためご面倒をおかけしてしまい恐縮ですが、どうぞアドバイスをお願いいたします。

[ メッセージ編集済み 編集者: しま太郎 編集日時 2006-08-24 14:14 ]
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-08-25 11:53
まだ、根本的なところで誤解があるように思います。
まずは、SunのGuess Numberサンプルでも、あるいはインターネットの紹介記事のサンプルでも動かしてみてはどうでしょうか?
しま太郎
常連さん
会議室デビュー日: 2006/08/22
投稿数: 39
投稿日時: 2006-08-25 15:56
引用:

まだ、根本的なところで誤解があるように思います。
まずは、SunのGuess Numberサンプルでも、あるいはインターネットの紹介記事のサンプルでも動かしてみてはどうでしょうか?


アドバイス、ありがとうございました。
一応既にいくつかのJSFアプリケーションは作成しているのですが、根本的に理解できてないまま進んでいたのかもしれません。。
現在作成している登録アプリケーションは急ぎなので他の方法で作成したのですが、今後もHTTPでget出来る方法を考えてみます(またいつか作ることがあるかもしれませんので、そのときの為に。。)。
また質問が出ましたときにはよろしくお願いいたします!!
ありがとうございました!

スキルアップ/キャリアアップ(JOB@IT)