2011-05-27 5 views
1

文書によると、使用するために、世界で最も簡単な製品であるべきでは:ICEfaces 2は実際に動作しますか?

は、単にアプリケーションにicefaces.jarを追加し、我々はページへの直接・ツー・ドム(D2D)を適用してレンダリングしています。

でも、最も基本的なチュートリアルGetting Started with ICEfaces 2でも動作するようには見えません。コードをページの一番下にダウンロードし、WARに組み込み、Tomcat 6.0.32とTomcat 7.0.14の両方に展開しました。私が気づいた最初の事は何らかの理由で、複合コンポーネントが機能しなかったということでした。次の属性(複数可)が必要とされますが、何の値がために供給されていない

/job-applicant.xhtml 39,78 @それら:id。

しかし、それはより多くのJSFの問題(JSF 2 Composite component required attribute throws exception)のように感じているので、私は持っていないようだ値(ID属性に必要な除去することにより、依然として必要=「true」とありますが、ことを決議問題)。とにかく、今すぐアプリケーションがデプロイされます。前述のように、ClearボタンをクリックするとAJAX呼び出しが使用され、応答XMLのフォームの完全なDOMが取得されます。次のステップは、icefaces.jarを追加することであり、唯一の違いは、応答して送信されていることを確認しますへ直接DOM機能を追加することになっている:

ICEfacesを2サーバ - にコンポーネントのマークアップをレンダリング現在のクライアントビューを反映するサイドDOM(Document Object Model)です。 JSFライフサイクルが実行されるたびにDOM比較が行われ、変更があれば、ページ更新の簡潔なセットがクライアントに送り返されてページに適用されます。このDirect-to-DOMまたはD2Dレンダリングと呼んでいます。

はしかし、私は、レスポンスとして完全な形式を取得し、プラスICEfacesをいくつかの追加の行は、このようなもの:

<input name="ice.window" type="hidden" value="epgo74zmvc" /> 
<input name="ice.view" type="hidden" value="vs4ik661" /> 

だから、はっきり、ICEfacesをが何かをやっているが、それは約束しないで何を。これは、実際のAJAXレスポンスよりも実際には長くなります。だから、実際には、より大きな応答であるという事実を無視して、私は次の約束に移っ:ダイレクト・ツー・DOMレンダリングで

、我々はもはやFは必要ありません:AJAXタグは、当社の「クリア」ボタンで入れ子になりました

右前方に音がする?このページの例では、リスナーのEL式をf:ajaxタグからh:commandButtonタグに移動するだけです。問題は、メソッドのシグネチャが異なることです。これはチュートリアルチュートリアルであるはずですが、実際に手順を順を追って説明していません。とにかく、バッキングBeanのclearFormメソッドのメソッドシグネチャを変更して、その引数が今すぐAjaxBehaviorEventではなくActionEventになるように修正できます。そうすることで、ICEfacesは実際にはフルページアクションとなるAJAXアクションを置き換えることができます。これはかなり信じられないほどですが、私の口にはまだ酸っぱい味があります。 D2Dが動作しないように見える理由は誰にも分かりますか?私は何か間違っているのですか?私はまだICEfacesを使うべきですか?

答えて

0

なぜこれが正しく機能していないと思われますか?

何が起きているのかは、フォーム全体をレスポンスとして取得して、JSFライフサイクル中にサーバー側のビューとコントロールの状態をリフレッシュできるようにすることです。実際にajaxタグを使ってフォームの部分的な更新を呼び出すと、指定されたコンポーネントにのみDOM更新がレンダリングされます。

AJAXは本当にここでプレーしていますが、DOM全体を送信する必要があります。そうしないと、サーバー側のロジックで古いデータが表示される可能性があります。

これは単なるICEFacesではなく、JSFです。実際、これは基本的にASP.NETの仕組みと同様です。 JSFのライフサイクルについては、このリンクを参照してください。

http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html

これはあなたが技術の外に期待するものではない場合、私は申し訳ありません。

+0

あなたのご意見ありがとうございました。私は、JSFライフサイクルが関与していることを知っています。そして、私はAJAXがここでプレーしていることを知っています。私はJSFのライフサイクルをある程度理解しています。しかし、ICEfacesはD2Dレンダリングでは、JSFライフサイクルがDOM比較を実行するたびに、変更があった場合、簡潔なページ更新セットがクライアントに送り返されてページに適用されることを保証しています_。しかし、「

」の** FULL ** DOMが戻ってきています。リンクされた開始チュートリアルを見ると、それがどれほど短いかを知ることができます。 – Lucas

0

ICEfacesがDOM比較を行った後、更新を送信する必要があります。ブリッジのクライアント側の部分に更新されたコンテンツを配置する場所を伝えるために、ICEfacesは祖先DOMノードの既知のIDをいくつか指定する必要があります。サーバー側のレンダラーは、自動生成されたIDと手動で指定されたJSFコンポーネントのIDのみを認識します。生のHTMLタグには対応できません。だから太った更新のあなたの観察のための私の最高の推測は、あなたが多くのHTMLタグを使用しているということです。

D2DおよびICEfacesブリッジのもう1つの点は、子要素を追加または削除できないことです。それはIDアドレス指定可能なタグを完全に置き換えることができます。つまり、テーブルに新しい行を追加すると、テーブル全体が更新されます。

私の知識は、ICEfaces 1.8.2に基づいています。

関連する問題