2011-12-28 14 views
1

JSFで使用するために、円チャートJSオブジェクトを採用しました。そうするために、適切なマークアップとJSコールをページに出力し、グラフを正しくレンダリングするカスタムコンポーネントを作成しました。参考までに、JSパートのチュートリアルではthis is the linkを参照してください。JSF2とカスタムコンポーネント - Javascriptコードからアクションを呼び出す方法

次のステップでは、スライス上のクリックをリッスンし、バッキングBeanからアクションを呼び出します。チャートのJSオブジェクトには、そのようなクリックをリッスンするプレースホルダ関数が既に含まれているため、JS部分が良好であると信じています。しかし、JSF側はまだ私をバグさせています。私はJava EEチュートリアル、Jim Driscollのブログ記事、そしてインターネット上のすべてを読んできましたが、それでも私の周りに頭を浮かべることはできません。

JSFのイベントリスナーにJS関数呼び出しをバインドする方法を少し例を挙げて説明してください。私のバッキングBeanにどのスライスインデックスがクリックされたかがうまく伝えられるようにしますユーザーは?

function myChartObject() { 

    function onSliceClick() { 
     // This will somehow trigger JSF ajax event listener with slice data 
    } 
} 

class MyCustomChart extends UIComponentBase implements ClientBehaviorHolder { 
    // Is the decode() method the place to bind JS calls to JSF actions? 
} 

私は私の問題に発見した最も近いthisのようなものです:

それは近いものになるだろう。しかし、標準のJSF APIを使用して、私自身のコンポーネントでこのサポートをしたいと思います。おそらくthisに近いものはありますか?

ありがとうございました!

答えて

1

JSFのJavaScript API自体は標準化されて呼び出します(リソースライブラリ "javax.faces" を、リソース名 "jsf.js")が、完全な追加は、独自のJavaベースのカスタムコンポーネントでのAJAXのサポートは少し精巧です。私は考えることができる

最も簡単な方法は、あなたが引用したことをジム・ドリスコルのブログを以下、複合コンポーネントで独自のJavaベースのカスタム・コンポーネントをラップすることによって<f:ajax>タグが提供する既存のAJAX機械を再使用しています。ジムの例では

、私は彼の例では22行から次のコードを推測し、あなたのonSliceClick関数内でレンダリングするべきである:

<ui:component 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:cc="http://java.sun.com/jsf/composite" 
    xmlns:cu="http://javaserverfaces.dev.java.net/demo/custom-taglib" 
> 
    <cc:interface shortDescription="Some Description"> 
     <cc:attribute name="render" required="false" />  
     <cc:attribute name="clickAction" method-signature="java.lang.Object action" required="true" shortDescription="The click action method" /> 
    </cc:interface> 
    <cc:implementation> 
     <cu:custom id="customId"> 
      <f:ajax render="#{cc.attrs.render}" listener="#{cc.attrs.clickAction}"/> 
     </cu:custom> 
    </cc:implementation> 
</ui:component> 

String click = behaviors.get("click").get(0).getScript(behaviorContext); 

それは、このように少し見えます

これはテストしていませんが、一般的な考えです。もちろん、すべてをJavaコードで直接実行することも可能ですが、確かにもう少し作業が必要です。

+0

私はそれの周りに方法はないと思うが、コンポーネント自体を少し簡素化しようとする。 JSチャートを見ると、スライスクリックの呼び出しはキャンバスコンポーネントに関連付けられています。作者はジオメトリを使用してクリックがスライス上にあるかどうかを識別し、イベントをトリガするJS関数を呼び出します。 JavaカスタムコンポーネントでこのJSの動作に何かをバインドするのは難しいでしょう。 – javabeats

0

Javaコンパイル済みコードでajaxスタイルのビヘイビアをエンコードし、これをJ2eeスタックと統合したいと思うようです。頭に浮かぶ

フレームワークは、JBOSSのシーム

  1. あるSeamはGWTは、軽量、スタンドアロン、ステートフルWebアプリケーションフレームワークの詳細です(、デザインによってJSFと直接統合 - それはしていませんJMSやその他の最新のJ2EE機能と直接統合するための組み込み機能が多数あります)。

  2. Seamは、GWTスタイルのajax対応コンポーネントを直接サポートしています。

良いここにチュートリアルがあります:AJAXを行うためにhttp://www.ibm.com/developerworks/java/library/j-seam3/

+0

私はSeamを知っていますが、このプロジェクトではオプションではありません。また、この問題はJSFカスタム・コンポーネント開発に関連しています。これは最初はフレームワークにとらわれないべきです。しかし、あなたの時間をありがとう:) – javabeats

関連する問題