Javaのツールについてお話ししたいのですが、最近偶然見つけたもので、Habrでそれに関する言及が1つも見つかりませんでした。 Metawidgetと呼ばれ、その目的はJavaでフォームを生成することです。
個人的に、私は彼がリアルタイムでそれをするという事実が好きでした。 コンパイルの段階でJava Beanを生成する1つのプロジェクトで何らかの形で作業しましたが、まったく気に入らなかったと言えます。 まず、生成されたクラスに触れることはできません。 それらはいつでも再生成できます。 ソース素材が奇妙に見えるのは、 純粋なJavaではありません。 IDEはこれらの「ガジェット」も認識しません。 まあ、コンパイル/生成中に、コーヒーを飲むか、inりで歯を磨くための追加の時間があります。
このツールの次の機能も同様に重要です。
Metawidgetは非常に多くのフォームを生成します。 つまり、SWING、JSF、JSP、その他あらゆる種類のJava Viewテクノロジーになりうるということです(完全なリストはサイトにあります)。 確かに、私が望むようにすべてを生成するわけではありませんが、それについては後で詳しく説明します。
このツールは、任意のPOJOオブジェクトと連携でき、オブジェクトにJPA / Hibernateアノテーションがあれば、それを正しく使用できます。 つまり、たとえば、ドロップダウンリストが作成され(HTML選択)、JPAアノテーション@Column(nullable = true)がある場合、リストの最初のオプションはnullになります。nullable= falseの場合、空のオプションはありません。
Metawidgetを使用してJSFフォームを生成する簡単な例を次に示します。
まず、ManagedBeanについて説明します。
@ManagedBean
public class MetawidgetBB {
@EJB
private FlexibleDAO flexibleDAO;
public UIMetawidget getMetawidget() {
HtmlMetawidget metawidget = new HtmlMetawidget();
initMetawidget(metawidget);
return metawidget;
}
public void setMetawidget(UIMetawidget metawidget) {
initMetawidget(metawidget);
}
private void initMetawidget(UIMetawidget metawidget) {
metawidget.setValue(Musician.class);
}
}
「metawidget.setValue(Musician.class);」行で、Beanとして使用するクラスを示します。
次に、JSFテンプレート:
....
xmlns:m="http://metawidget.org/faces"
....
<h:form>
<m:metawidget binding="#{metawidgetBB.metawidget}"/>
<h:form>
....
Beanは提供しませんが、一般的には、パブリックプロパティまたはゲッター/セッターを持つ任意のクラスにできます。 私の場合、まだManyToManyの関係がありました。
だから すべて準備完了です。 コンパイルして実行します。
出来上がり!
ただ何かが正常ではありません。
ManyToManyがリンクする場所には、編集可能なフィールドはありません。 ただのテキスト。
これはそれをひっくり返すものです。 もちろん、この場合のツールにはテキストフィールドを配置する権利がないことを理解していますが、オプションを提供することもできません。 彼らが何であるかを知りません。
開発者は、この問題に対する独特の解決策を見つけました。 これらは特別なUi * Lookupアノテーションです。 たとえば、次の方法で要素をリストできます。
@UiLookup( { "Riga", "Moscow", "Kukuyevo" } )
public String getCity()
しかし、一般に、これはすべての値がハードコートされているため、問題を解決しません。 JSFには、式注釈があり、次のようになります。
@UiFacesLookup("#{myManagedBean.cities}")
Metawidgetは、必要に応じて都市のリストを持つ入力要素を描画し、ManagedBean "myManagedBean"、メソッド "getCities()"にアクセスし、そこから受け取ったリストを置き換えます。 そして、ManagedBeanでは、必要なものはすべてスリップします。 JFSだけでなく、同様のソリューションが利用可能です。
最後に、楽器の個人的な印象を書きたいと思います。
一般に、彼は関係を除いて、彼の目標と彼のパラダイムを完全に一致させます。 さらに、最近Python / Djangoを試してみましたが、そこでORM Beanから管理者を作る機会が本当に気に入りました。 そして、私はJavaでそれを見たいと思っています...もちろん、サイトが十分に深刻な場合、オートメーションを使用しない方が良いかもしれないほど多くのニュアンスがあるかもしれないことを理解していますが、今のようにすべてを行うことは、プロジェクトの開始時にJavaを大いに助けるでしょう開発者に。
夢を現実に近づけるために、JPAデータとMetawidgetsの間に独自のライブラリ層を作成したいと思います。 すべてが自動的にプルアップされ、維持されるように。 今日、私は注釈とその処理を行ったので、JPAを介して要素自体を接続しました。
私は優れた専門家であるとは言えませんが、Metawidgetsのコードは十分に良さそうで、簡単に見つけることができました。