JSF GUI開発エクスペリエンス

サーブレット、JSP、XML / XSLT、Struts、Tapestry(3、4、5)、Wicket、Spring MVC、GWTを使用した経験があります。



しかし、JSFはこれまで迂回しました。 その理由は、JSFが最初に登場したとき、同じタペストリーとWicketと比較して、最初の化身で不気味に不器用に見えたためです。



時間が経ち、JSFは死ぬことはありませんでしたが、バージョン2.1ですでに登場しました。 そして、私は毎年約3か月を費やしているパイロットプロジェクトの1つに使用することを決めました-視野を広げ、退屈なコンサルティング(残りの9か月は子供のために稼いでいる)から気をそらします。







裸のHTMLフォームでは、21世紀にGUIを実行するのは簡単で、下品です。 したがって、もちろん、私はAJAXとそのような食欲をそそる性的なウィジェットのすべてを望んでいました。



インターネットを読んだ結果によると、次の3つが考慮の候補として選択されました-RichFacesPrimeFacesICEFaces 。 フレームワークの最新バージョン(ベータ版、RCなどを含む)が使用されました。



最初の2つのフレームワークが最初の(Jaの栄光!その最初の)最も愚かなテストで切断されたことは残念です。



私が構築しなければならなかったのは、アプリケーションの豊富なフォームのバックエンドでした。 したがって、タブなしで行うことはできません。

残念ながら、RichFacesとPrimeFacesは、フォームの一連のタブをレンダリングするときに次のことを理解していません。



<panelTabSet>



<panelTab label="First tab">

...

</panelTab>



<panelTab label="Second tab">

...

</panelTab>

...



</panelTabSet>









選択したタブが「最初のタブ」である場合、「2番目のタブ」にあるものレンダリングする必要はありません 。 RichFacesおよびPrimeFacesは、常にTabSetのすべてのコンテンツを含むオブジェクトのツリーを作成します。 を含むすべての選択されていないタブ。 これは絶対に受け入れられませんでした。各タブには、データベースから取得したものを含む多くのデータがありました。



この不運な劣等性に加えて、JavaScriptを使用する必要性は、あちこちでRichFacesとPrimeFacesから漏れました。



驚くべきことに、ICEFacesはタブのレンダリングを担当するだけでなく、JavaScriptを使用せずに機能するコンポーネントを含んでいます。



その結果、約120時間の作業で、かなり広いGUI(12の大きく複雑なフォーム)を既存のカーネルにアタッチし、Faceletsマークアップの形式(CSSを使用した場所)およびJava(つまりJava)でのみプログラミングすることができました。 Javascriptを使用せずに。



これは、すべてが次のように見える方法です。



スキンは「ライム」と呼ばれるデフォルトのスキンの1つであるため、麻酔薬は不幸な場合があります。



重要な結果:JSFを使用できる理由がわかりました(つまり、JSFではなく、特にICEFaces)-あまり負荷がかからない(数百ユーザー)バックエンドインターフェイスで、ブラウザーとサーバー間の距離が短い場合。



サーバーとの過剰な通信のオーバーヘッドは、高レベルで迅速にプログラムする機能によって相殺されます。 そして、一般的に、すべてが機能します。 サーバープッシュも機能します(サーバー上のイベントの画面を更新します)。



次のテクノロジーが使用されました。

-Maven、まあ、彼なしで

-ICEFaces、上記を参照してください。

-標準のMojarraではなくMyFaces-エラーのより良い診断のため。

-スプリングコア

-春のセキュリティ

-セレン

-桟橋



VMを停止せずに変更されたコードを自動展開するツールであるJRebelについて、別の良い言葉を言いたいと思います。 私はオープンソース開発のライセンスを持っていますが、一般的に言えば、JRebelはエストニアの同志が要求する控えめなお金がかかります。 優れた製品であり、前述のように機能し、時間を節約します。



すべての開発はIntelliJ IDEAで実施されました。 しかし、Eclipse / Netbeansでは、すべてが同じように機能するはずです。



そうそう、私はこのすべてを書き始めました...



実際、私のプロジェクトからその本質は蒸留され、githubに次のように保存されました。

このささやかな成果物

私はそれをMavenの原型にするつもりでしたが、それは怠lazになりました。



このプロジェクトには上記のすべてが含まれており、基本的なログイン/ログアウトフォームが機能します。これにはSeleniumテストも記述されています。 詳細はgithubのREADMEをご覧ください。



これが重要なプロジェクトの開始時に誰かが少し時間を節約するのに役立つことを願っています。

コンポーネントの選択と適合には、約2週間かかりました。



All Articles