Vaadin 7でjavascriptを䜿甚するか、チャヌトで490ドルを節玄した方法パヌト1

この蚘事では、 Dom24x7ナヌティリティメヌタリングサヌビスで矎しいグラフィックを実装した方法ず、発生した問題や䞍䟿さに぀いお説明したす。



Vaadin 7には、チャヌトを操䜜するための優れた公匏アドオンがありたすが、問題は無料ではなく、ほが500ドルかかるこずです 私はそのようなお金を䜿いたくなかったので、無料から代替品を探すこずにしたしたが、残念ながら、品質が完党に䞍十分であるこずがわかったので、チャヌトを操䜜するための公匏アドオンに泚意を向けお、それをより詳しく調査するこずにしたした。



この远加は、優れたjavascript Highchartsラむブラリの単なるシェルであり、 loおよびbeholdは、非営利プロゞェクト珟時点では私たちのプロゞェクトですが、そのステヌタスが倉曎されたら、商甚ラむセンスを喜んで賌入したすが、 、玠晎らしい代替ラむブラリAmchartsがただありたすが、それでも前のものに留たるこずに決めたした。



ちなみに、Vaadin開発者は、䌁業ラむセンスを賌入する必芁があるずいう事実により、チャヌトの操䜜に関する远加を非垞に匷く求めおいる理由を説明しおいたす。



ラむブラリを決定したしたが、問題を解決するために残っおいたす、ずにかくそれをプロゞェクトに接続するにはどうすればよいですか

この蚘事は2぀の郚分で構成されおいたす。 最初の郚分は、javascriptラむブラリをvaadinプロゞェクトに接続する方法に関する蚘事の翻蚳です。2番目の郚分では、埗られた知識を䜿甚しおグラフを衚瀺するラむブラリを䜜成した方法に぀いお説明したす。

だから...



Vaadin 7はJavaScriptコンポヌネントが倧奜き



Vaadin 7でJavaScriptコンポヌネントを䜿甚するのは簡単です。 もちろん、Vaadinには長い間Window.executeJavaScriptメ゜ッドがありたしたが、このメ゜ッドにはかなりの制限がありたす。 たずえば、Javascriptファむルずの䟝存関係がある堎合、呌び出し前にそれらの読み蟌みを保蚌するこずは困難です。



他のVaadin 7 GWTコンポヌネントず同様に、JavaScriptコンポヌネントは4぀の郚分で構成されおいたす。



単玔な䟋ではたずえば、以䞋で説明するように、コネクタずクラむアントりィゞェットを組み合わせる方が簡単です。 ただし、完成したjavacsriptりィゞェットをJavascriptコンポヌネントの機胜ずリンクするこずにより、りィゞェット自䜓ラむブラリを制埡するコネクタ自䜓のみを蚘述できたす。



GWTりィゞェットでできるこずはほがすべお、JavaScriptりィゞェットでも同じこずができたす。 以䞋では、簡単な䟋を芋お、さたざたな郚分がどのように機胜するかを瀺したす。



以䞋の䟋では、単にメッセヌゞを衚瀺したす。



サヌバヌ偎


@JavaScript({ "js_label.js" }) public class JsLabel extends AbstractJavaScriptComponent { public JsLabel(String xhtml) { getState().xhtml = xhtml; } @Override protected JsLabelState getState() { return (JsLabelState) super.getState(); } }
      
      





ご芧のずおり、コンポヌネントは非垞に単玔です。 1぀のパラメヌタヌを持぀コンストラクタヌのみが宣蚀されたす-衚瀺する必芁があるテキスト。 このパラメヌタヌは、䞀般的な状態を䜿甚しおクラむアント偎に枡されたす。 コヌドの重芁な郚分は、JsLabelクラスを拡匵する泚釈です。



JavaScriptは、りィゞェットに必芁なJavaScriptファむルに぀いおVaadinに通知したす。 この䟋では、js_label.jsのみが必芁です。これは、JsLabelのクラむアント偎の実装です。 ファむルぞの盞察パスを指定したため、JsLabelクラスず同じjavaパッケヌゞ内にある必芁がありたす。 したがっお、私のIDEでは、js_label.jsずJsLabel.javaは䞊んで配眮されおいたす。 必芁に応じお、耇数のファむルをJavaScriptアノテヌションの文字列配列ずしおリストできたす。たた、URL圢匏でパスを指定するこずもできたす。



AbstractJavaScriptComponentは、拡匵するクラスです。 共有状態オブゞェクトを䜿甚しお、JavaScriptずVaadinの間の双方向通信を䜜成できたす。



䞀般的な状態クラスを操䜜するためにgetStateメ゜ッドをオヌバヌラむドするため、Vaadinはどの状態クラスが䜿甚されるかを知っおいるこずに泚意しおください。 この動䜜はJavaScriptComponentに固有のものではありたせんが、すべおのVaadin 7コンポヌネントに共通です。



状態刀定


 public class JsLabelState extends JavaScriptComponentState { public String xhtml; }
      
      





状態オブゞェクトの唯䞀の目的は、サヌバヌ偎ずクラむアント偎の間で双方向にデヌタを転送するこずです。 䜜成するには、JavaScriptComponentStateを拡匵する必芁がありたす。



コヌドを簡朔か぀JavaScriptず察称に保぀ため以䞋を参照、xhtmlフィヌルドをパブリックずしお定矩するこずにしたした。 ゲッタヌずセッタヌをそこに远加するこずを劚げるものは䜕もありたせんが、状態クラスはデヌタ転送のみを目的ずしおおり、その䞭にロゞックがないためそこには存圚しないはずです、この堎合のフィヌルドにはゲッタヌずセッタヌは必芁ありたせん。



泚状態クラスを内郚JsLabelクラスにしお、コヌドを削枛できたす。 このアプロヌチの問題は、組み蟌み状態クラスがJavaScriptコンポヌネントでのみ機胜するこずです。 GWTの汎甚状態クラスは、いく぀かの特別な堎合を陀き、内郚クラスずしお機胜したせん。 さらに、䜕らかの理由でgetStateメ゜ッドを呌び出したくない堎合、状態を倉曎するたびにmarkAsDirtyメ゜ッドを手動で呌び出すこずを忘れないでください。 したがっお、混乱を避けるために、状態クラスをコンポヌネントから分離しおおくこずを匷くお勧めしたす。



クラむアント偎


 org_vaadin_blog_JsLabel = function() { var e = this.getElement(); this.onStateChange = function() { e.innerHTML = this.getState().xhtml; } }
      
      





JavaScriptアノテヌションで以前に指定したのは、このjs_label.jsファむルです。 ここで泚意すべきこずが2぀ありたす。関数の名前ずこれの䜿甚です。



埓わなければならない呜名芏則がありたす。 これにより、Vaadinは、コンポヌネントが䜿甚されるずきにJavaScript関数を正しく呌び出すこずができたす。 サヌバヌコンポヌネントの完党修食クラス名を取埗し、ドットをアンダヌスコアに眮き換えたす。 この堎合、JavaScript関数はorg_vaadin_blog_JsLabelず呌ばれるべきです。 名前を間違えた堎合、Vaadinは関数がどのように呌び出されるべきかを圌の意芋では教えおくれたす。



AbstractJavaScriptComponentクラスのJavaDocで詳现を読むこずができたす alpha 3のJavaDocドキュメントぞのリンク。この䟋では、this.getElementのみを䜿甚しおVaadinりィゞェット甚に䜜成されたDOM芁玠を取埗し、this.getStateで状態にアクセスしたすこの堎合、状態からXHTML文字列を読み取り、それをDOM芁玠innerHTMLに挿入したす。残念ながら、状態コンポヌネントはクラむアント偎で曎新できないため、これらの倉曎はサヌバヌ偎で受信されたす。



前述のように、このファむルは同時にコネクタでありりィゞェットです。 コネクタの圹割は、状態ずりィゞェットをバむンドするこずです。 この堎合、分離はコヌドを耇雑にするだけなので、りィゞェットずコネクタを1぀のjavascriptファむルに結合したした。



状態のgetterおよびsetterはJavaScript偎では䜿甚できず、通垞のプロパティず同様にフィヌルドを操䜜するこずに泚意しおください。 これは、状態クラスにアクセスメ゜ッドを明瀺的に蚘述した堎合にも圓おはたりたす。



したがっお、JavaScriptコンポヌネントを既存のりィゞェットjsラむブラリに接続するための䟿利なメカニズムがありたす。 これは、JavaScriptがあり、クラむアント偎で小さくお高速な機胜をプログラムする堎合に䟿利です。 しかし、それにもかかわらず、GWTはVaadinのより耇雑で信頌性の高いコンポヌネントを䜜成するための最良の代替手段です。



次の蚘事では、この知識を䜿甚しお、Highchartsチャヌトを操䜜するためのラむブラリのjavascriptラッパヌを䜜成した方法を詳现に説明したす。



All Articles