2011-11-09 7 views
3

現在のプロトタイプでは、ほとんどの標準HTMLコントロールがアプレットに置き換えられています。最も重要なのは、フォーム提出がアプレットによってトリガーされることです。JSF /アプレット統合

サーバー側で対応するアクションを呼び出す方法が

<h:commandButton action="#{ctrl.doit}"/>? 

のようにほぼ同じ方法この記事Applet and JSF Integration - exampleありますが同じ質問ではなく、適切な答えを持っていました。アプレットは、サーバーの視点からフォームを置換する際のドロップです。これは専用の(隠された)フィールドとサブミットを埋め、サーバーとの直接の通信はありません。

EDIT

はこれまでのところ、私は、これらの統合の可能性がある理解:

  • (隠された)のUICommandを追加し、あなた自身ののUICommandを実装するJavaScript
  • を経由して、それをトリガーします。私が理解する限り、私はフォームのサブミットコントロールとしてアプレットをマークするための隠しパラメータを定義したいと思います。リクエスト処理サイクルでUICommand実装が見つけてアクションをトリガーします。おそらく、MethodExpressionsのエンドポイントとして仮想コントロール(f:viewParamに匹敵する)を実装する必要があります。
  • (ランダム)コントロールまたはより一般的なイベントリスナーのいずれかにリスナーをアタッチして、ここにあなたのものを行います。この場合、ナビゲーションはどのように行われますか?
+0

あなたのコードを共有することは素晴らしいことです。 Applet-JSFのリソースはWeb上にあまり多くありません。よろしく、 –

+1

このアプレットの統合は、簡単なJavaScript呼び出しになります。 JSObject.getWindow()を取得し、非表示の「OK」ボタンをクリックするJavaScriptを「eval」します。 – mtraut

答えて

3

これは、埋め込まれたアプレットを持っている非常に同じページ内の物理的なJSFビューを持たずにことはできませんです。したがって、少なくとも<h:form>と同じページに<h:commandButton>が必要です。必要に応じてCSS display: none;によって隠されている必要があります。これは、JSFがサーバ側でそのフォームのビューステートを持つ必要があること、特にCSRFのような攻撃を防ぐためです。ページ内の物理<h:form>を持つことは(あなたの特に場合も同様のようです)あなたのために問題がない場合は、あなただけのアプレットは、フィールドを埋めてみましょう(もしあれば)とApplet-JavaScriptを使用して、フォームのボタンをクリックすることができますコミュニケーション。それ以外

は、単純なサーブレットやJAX-RSのような実際のWebサービスAPIは、/ JAX-WSは本当に最良の方法です。 JSFはコンポーネントベースのMVCフレームワークであり、Webサービスフレームワークではありません。それは、そのリンクされた質問の私の答えが明確にしようとしているのです:のための正しいツールを使用します。

+0

ありがとう!とにかくデザインでフォームを用意する必要があります - 私は隠しボタンをスキップする方法を探しました。アプレットはWebサービスクライアントとして使用されません。ファンシーなボタンの実装を想像してみてください。私はそのような振る舞いを実装することについての質問にいくつかの発言を追加します... B.t.w - あなたは本当に素晴らしい貢献者です。あなたは常に、正確で迅速なサポートと理解可能な回答を提供します。単純に素晴らしい。 – mtraut

+0

物理的な 'UICommand'コンポーネントよりもマネージドBeanアクションを呼び出す方法は他にありません。しかし、いくつかのsetterメソッドで 'valueChangeListener'やフックを乱用することはできますが、これはひどいことです。 – BalusC

+0

残念なことに申し訳ありません - 私は昨日の編集でこの賛美歌を追加しましたが、私はすでにコミットしたときにあなたはすでに答えています。あなたがそれを見逃した場合に備えて:-) – mtraut

関連する問題