1

TagLibの代わりにAjaxを使用するというアイデアを考えていました。最もエレガントな方法は次のとおりです。Javaアノテーションを使用する。アイデアは、デザイナーや誰でも、idまたはnameを持つ「標準」HTMLタグを使用して、taglibなしでHTMLを作成し、Javascriptを呼び出すことができるということです。そうすれば、どのWYSIWYGでも使用でき、開発者はHTML形式やその設計方法を気にする必要がありません。多くの(少なくともオープンソースの)WYSIWYGは、その最終結果にtaglibsを表示しない(またはそのテンプレートを持っている)ため、「プレビュー」するのは困難です。他の理由は、開発者はJavaを知っている必要があり、CSSとAJAXを入手したので、HTML/TagLibsは必須ではないはずです。

次のように機能するはずです。

MyClass.java

import ...

// Use the ResourceBundle resource[.{Locale}].properties
@Jay2JI18n(resourceBundle="org.format.resource",name="MyClassForm")
public class MyClass {
    private Integer age;
    private String name
    private Date dob;
    private salary;

    @Jay2JLabel(resource="label.name")
    @Jay2JMaxLength(value=50,required=true,)
    @Jay2JException(resource="exception.message")
    public String getName() {
         ...
    }
    public void setName(String name) {
        if ( name.trim().equal("") ) {
            throw new Exception("Name is required");
        }
    }
    /* Getter and setter for age */
    ...
    @Jay2JLabel(message="Salary")
    @Jay2JFormat(format="##,###.00",language="en")
    @Jay2JFormat(format="##.###,00",language="pt_BR")
    // or you could use that to access a property of the ResourceBundle
    //@Jay2I18nResource(resource="money.format")
    public Date getSalary() {
        ...
    }
    /* Setter for salary and getter/setter for the rest */
    ...
}

Page.html

<html>
  <head>
    <SCRIPT>
    </SCRIPT>
  </head>
  <body>
     <form onload="Jay2J.formalize(this)">
     </form>
  </body>
</html>

そのうちのフィールドが入力されたHTMLにすることができます。 PageWithFields.html

<html>
  <head>
    <SCRIPT>
    </SCRIPT>
  </head>
  <body>
     <form action="myfavoritewaytopostthis" onsubmit="return Jay2J.validate(this)" onload="Jay2J.formalizeExistField(this)">
       <label>Name</label><input type="text" name="name" id="name" />
       <label>DOB</label><input type="text" name="dateOfBirth" id="dob" />
       <label>Salary</label><input type="text" name="salary" id="salary" />
       <input type="submit" />
     </form>
  </body>
</html>

このようにして、注釈(XMLなし、別のファイル変更のみであり、XMLはJavaではないという点でHTMLに似ています)は、HTMLの処理方法を定義します。そうすれば、開発者はHTMLでの開発をやめて、JAVA(またはJavaScript)だけを使用できます。それは有効なアイデアだと思いますか?

4

4 に答える 4

2

あなたのトピックのタイトルを見たとき、私は次のように思いました:

taglib の代わりに Ajax を使用することはできません。AJAX はクライアント上の JavaScript であり、taglib はサーバー上の Java コードです。

あなたの投稿を読んだ後、[link text][1] がすることを彼はどうしたらいいのだろうと思いました

しかし、まったく同じではありません。

[1]: http://code.google.com/webtoolkit/ GWT

于 2008-10-29T14:37:00.350 に答える
1

第一印象は...うん、これを手にした人は、あなたの(新しい、異なる、非標準の)やり方を学ばなければ、彼らが何を見ているのかわからないでしょう。Bean(値オブジェクト)を取得し、適切なhtmlを出力するためにいくつかのマイナーなリフレクション/アノテーション検査を行うタグを実装することで、同様のことを行うことができます。

値オブジェクトに、タグがhtmlを抽出してフォーマットするために使用する単純なインターフェースを実装するようにします。おそらく、作業の半分以下で、目的の80〜90%を取得できます。

于 2008-10-29T20:12:11.563 に答える
1

第一印象は、WTFでした。さらに読んでみると、あなたは「関心の分離」の問題に別の方法で取り組もうとしているような印象を受けます。あなたのアプローチに関するいくつかの観察。

  1. クライアント側のスクリプトを有効にする必要があるため、アクセシビリティ ガイドラインに違反します。
  2. 車輪の再発明: Tapestry や Wicket などの多くの Web フレームワークは、これらの問題に対処しようとしており、称賛に値する成果を上げています。
  3. Java を HTML にバインドすることに関するあなたのコメントでは、コード例はその考えをあまり明確に伝えていません。formalize() は UI を作成しているようです。これは、UI (HTML) が Java にコード化されていることを意味します (悪い考え? おそらく、NakedObjects は UI のドメイン モデルを試みません。ページ固有のコードを記述する場合はおそらくそうです)。
  4. validate() は onSubmit() で呼び出されます。なぜ非同期で処理したいのですか!! それはさておき、目障りなJavaスクリプトを使用することは時代遅れです(再び懸念の分離)
  5. WYSIWIG を妨げる taglibs に関するあなたの議論は、正当化できますが、完全に有効ではありません。タグを使用して他のタグを構成することはできません。各タグは、動作を処理するか、HTML コードを発行する一意のエンティティです。あなたの議論は2番目のケースに有効です。ただし、formalize() を正しく理解している場合は、同じことを行っています!

いくつかの新しいアイデアを聞いてうれしいです.SOへようこそ. また、コメントを追加するのに十分な評判が得られるまで、質問の編集オプションを使用してください。回答を追加するのは正しい方法ではありません。

于 2008-10-30T19:02:17.163 に答える
1

私がそれを正しく理解すれば、この考えにはいくらかのメリットがあります。

AOP を使用して、ページに対して実際に呼び出されるサーブレットを変更できます。サーブレットは、注釈を使用して html を返します。

この方法では、プログラマーは html 生成を認識しません。標準の JavaScript ライブラリがあれば、それが機能する可能性があります。

しかし、効果があるからといって、やればいいというわけではありません。

前述のように、Javascript をプログラマーから隠すことができるフレームワークが数多くあります。たとえば、JSF は基本的に taglib であり、ナビゲーション スキームが異なります。

似たようなことをするために beehive プロジェクトを使用したことを覚えています。それは注釈駆動型だったので、基本的にすべてを Java で行うことができ、何年も前に JavaScript を生成しました。:)

于 2009-09-01T00:44:21.520 に答える