- - PR -
JSF web.xmlの書き方
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-23 14:19
アドバイス、ありがとうございます!
現在のコンテキストパスは教えていただいた方法で調べてみた所、 /website でした。
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> こちらも説明不足でした。スミマセン。。
この場合、こちらを記入するサーブレット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 ] | ||||||||||||
|
投稿日時: 2006-08-23 14:52
/から指定されているので、コンテキストルート(website)からの相対パスになるのでは?
フォワードでもこのように動作しましたっけ?
リダイレクトではなくフォワードですから、ブラウザから見たカレントのURLは http://website/faces/touroku?userID=XXXになっているのではないですか? | ||||||||||||
|
投稿日時: 2006-08-23 18:54
なるほど。ということは、tourokuのインスタンスが二つできています。 一つはTomcatがweb.xmlの指定にしたがって作るものでdoGetが呼ばれます。 もう一つはJSF(FacesServlet)がfaces-config.xmlの指定にしたがって作るものでgetMessageが呼ばれます。 インスタンスが違うのでインスタンス変数を当然共有できていません。 実際にやりたいのがパラメタを参照することなのであれば、昼間に私が投稿した方法で実施するのが普通です。touroku.doGetで他に何かしたいのでしょうか? | ||||||||||||
|
投稿日時: 2006-08-23 19:01
そうでした! でも、しま太郎さんは"/website"になっていると言っていますね。何か変ですねえ。
そうです。FacesServletが呼ばれていないと、FacesContextのインスタンスができていないので、f:viewタグの処理でJasperException: Cannot find FacesContextになります。(すみません、先の投稿で「ヌルポになる」と書きましたが正しくはこのエラーです) で、エラーが起きないでまがりなりにも表示されているということはFacesServletが呼ばれているということです。 | ||||||||||||
|
投稿日時: 2006-08-23 19:42
これまでの書き込みには「現象に対する話題」と「今回の要件への対応方法の話題」の両方があるため、しま太郎さんが混乱しているようにも見受けられます。
ここでは後者のみを記します。 まず、おかしな実装になっているところは「自前ServletとJSFを混在している」というところです。 JSFを利用する場合、Servletは「FacesServlet」のみにしてください(場合によっては別途用意することも考えられますが、今回の要件では不要です)。 そのうえで、よしだひろゆきさんが「2006-08-23 13:19」の末尾に書かれた方法でデータを取得すれば、すっきりと要件を満たせるかと思います。 [ メッセージ編集済み 編集者: t_yamo 編集日時 2006-08-23 19:43 ] | ||||||||||||
|
投稿日時: 2006-08-24 10:38
アドバイス、ありがとうございます!
t_yamoさん、サーブレットはJSFサーブレットだけにすれば良かったのですね。。 「自前ServletとJSFを混在している」…な…なるほどです…
このクラスで行いたいことは他にもいくつかあるのですが(今はまだテスト段階なので行ってはいないのですが)、私が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 ] | ||||||||||||
|
投稿日時: 2006-08-25 11:53
まだ、根本的なところで誤解があるように思います。
まずは、SunのGuess Numberサンプルでも、あるいはインターネットの紹介記事のサンプルでも動かしてみてはどうでしょうか? | ||||||||||||
|
投稿日時: 2006-08-25 15:56
アドバイス、ありがとうございました。 一応既にいくつかのJSFアプリケーションは作成しているのですが、根本的に理解できてないまま進んでいたのかもしれません。。 現在作成している登録アプリケーションは急ぎなので他の方法で作成したのですが、今後もHTTPでget出来る方法を考えてみます(またいつか作ることがあるかもしれませんので、そのときの為に。。)。 また質問が出ましたときにはよろしくお願いいたします!! ありがとうございました! |