1

私は学校に予定されている(実際にはやり過ぎの)プロジェクトを持っていて、何か簡単なことをすることができません。

Netbeans 7.2.1、Glassfish 3.1.2.2、および最新のJavaJDKを実行しています。

4つのJSFページ、index.xhtml ItemAdd.xhtml、ItemCatalog.xhtml、およびItemDetail.xhtmlと1つのサーブレットSessionServletがあります。各ページに直接アクセスできることを確認しました。

http://localhost:8080/CMIS440Spitzer-Project2/faces/ItemDetail.xhtml 

動作します。ただし、JSFページの1つからサーブレットに移動し、リクエストを転送すると、glassfish404エラーが発生します。

転送を実行している非常に単純なサーブレットコードは次のとおりです。

if (request.getParameter("target").contains("Add Item")) {
        String URL = request.getContextPath() + "/faces/ItemAdd.xhtml";
        System.out.print(URL);
        RequestDispatcher dispatcher = request.getRequestDispatcher(URL);
        dispatcher.forward(request, response);
    }

コンソールの1つに、ブラウザに貼り付けることができる次のものがあり、動作します。

INFO: /CMIS440Spitzer-Project2/faces/ItemAdd.xhtml

コンソールメッセージを受け取ったので、リクエストがサーブレットに到達していて、正しいコードブロックにヒットしていることがわかりました。また、Glassfish 404エラーが発生したため、正しいポートでマシンに転送されていることがわかりました。

RequestDispatcherの問題は何ですか?なぜこれが機能しないのですか?

ありがとう。

<rant>

これはこの問題よりも多くの問題を伴いますが、私はPHP、perl、C ++、C、Java、およびその他のいくつかの問題に取り組んできました。言語(この場合はJavaのJSF実装)が積極的に私の人生を可能な限り困難にしようとしていると感じたことはありません。たとえば、この環境で必要なものの多くはマップの形式です。すべてのリクエストパラメータのリストが必要、マップを取得する、すべてのセッションパラメータのリストが必要、マップを取得するなど。ただし、JSFでは簡単にできません。マップを介してループ!なぜ、遅いから。基本的にはJava開発者からのMeaCulpaであるリンクを見つけました。これは、O(N)速度であるため、低速になると述べています。言い換えれば、Java JSF開発者は私のコードを事前に最適化し、マップをリストに変換するように要求します。

これのある時点で、リフレクションとプライベートメソッド/プロパティへのアクセスに関して奇妙なエラーが発生していました-私のコードのどこで私はそのようなことをしていました。私は標準のゲッター/セッターを使用してマップキーセットを返していました。

ゲッター/セッターの命名規則を始めないでください(大文字を小文字に変換し、get / setを前に追加します)

多分それは私ですが、このセットアップ全体は過度に鈍く、理解するのが難しく、不必要に複雑に見えます。

私の暴言を読んでくれてありがとう。私はこの方法にずっと長くいて、簡単なことをしようとして涙を流すべきだと思っていました。

</rant>
4

2 に答える 2

0

セッション管理用のサーブレットと JSF ページを混在させているのはなぜですか? JSF を使用するときは、http 要求/応答パラダイムの観点から考えるのをやめなければなりません。これは、デスクトップ GUI プログラミングとの共通点が多いイベント駆動型フレームワークです。確かに、JSF は最も使いやすい Web フレームワークではありませんが、必要以上に複雑にしています。

于 2012-11-29T15:38:36.787 に答える
0

getRequestDispatcher渡すパスは、コンテキスト ルートからの相対パスです。

それにコンテキストパスを追加すると/CMIS440Spitzer-Project2/CMIS440Spitzer-Project2/faces/ItemAdd.xhtml、存在しない になります。

(実際には、これがそうであるように、スラッシュで始まる場合はコンテキスト ルートに対して相対的です。スラッシュで始まらない場合は、サーブレットに対して相対的です。)

于 2012-11-29T15:47:04.160 に答える