2008-10-29 68 views
1

我在想使用Ajax而不是TagLib。最優雅的方式是:使用Java註釋。 想法是,設計師或任何人都可以在沒有任何taglib的情況下製作HTML,只需使用帶有id或name的「標準」HTML標籤,然後調用Javascript即可。這種方式可以使用任何所見即所得,開發人員不必關心HTML格式或其設計方式。 在許多(至少是開源的)所見即所得中,不要在最終結果中顯示taglibs(或者有模板),所以很難「預覽」。其他原因是,開發者應該知道Java和HTML/TagLibs不應該是必須的,因爲我們得到了CSS和AJAX。使用AJAX代替TagLib?

它應該就是這樣:

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,這就像HTML的方式,這只是另一個文件修改和XML是不是Java),將定義HTML將如何處理。這樣開發人員可以停止在HTML中開發並使用JAVA(或JavaScript),你認爲這是一個有效的想法嗎?

回答

2

當我看到你的主題標題我想:

你不能在標籤庫代替使用Ajax。 AJAX是客戶端上的javascript,taglib是服務器上的Java代碼。

讀您的文章後,我想,啊,他什麼做什麼[鏈接] [1]確實

但後來不entrily相同。

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

1

第一印象是......呸,別人誰發現這一點,將沒有辦法知道他們不學習你的(新的,不同的,非標)的方式在看什麼做事。你可以通過實現一個帶有bean(值對象)的標籤來做類似的事情,也可以做一些小的反射/註釋檢查來發出正確的html,並且你會爲自己節省很多心痛。

使您的值對象實現一個簡單的接口,您的標記將使用該接口來提取和格式化html,並且您可能會獲得80-90%的嘗試使用1/2工作或更少的位置。

1

第一印象是,WTF。在進一步閱讀之後,我的印象是你試圖以不同的方式解決「分離問題」的問題。關於你的方法的一些觀察。

  1. 需要啓用客戶端腳本,因此無法訪問指南行。
  2. 重塑車輪:Tapestry,Wicket等許多Web框架試圖解決這些問題並做了值得稱讚的工作。
  3. 關於將Java綁定到HTML的評論,代碼示例沒有很清楚地表達這個想法。formalize()似乎創建了UI,這意味着你已經將UI(HTML)編碼爲java(糟糕的想法?可能不是NakedObjects試圖爲你的UI的域模型,可能是如果有人寫一個頁面特定的代碼)
  4. 在onSubmit()上調用validate(),爲什麼我要它異步處理!除此之外,使用obstrusive java腳本是不合時宜的(再次分離問題)
  5. 您對taglibs防止所見即所得的爭論雖然合理,但並不完全有效。標籤不能用於組成其他標籤,每個標籤都是一個獨特的實體,可以處理行爲或發出一些html代碼。你的論點適用於第二種情況。但是,如果我正確理解你的形式化(),你也是這樣做的!

很高興聽到一些新的想法和歡迎來到SO。另外,請使用編輯問題選項,直到您獲得足夠的信譽來添加評論。添加答案是不正確的!

1

如果我理解正確,這個想法有一些優點。

您可以使用AOP來修改實際爲頁面調用的servlet。然後,servlet將使用註釋返回html。

這樣,程序員看不到html代,如果你有一個標準的JavaScript庫,那麼它可能會工作。

但是,僅僅因爲它的作用並不意味着你應該這樣做。

如上所述,有許多框架可以隱藏程序員的JavaScript,比如JSF,它基本上是taglibs和一個不同的導航方案。

我記得使用蜂巢項目做類似的事情,它是註釋驅動的,所以我基本上可以在Java中做所有事情,並且它在幾年前生成了JavaScript。 :)