1

我正在考虑使用 Ajax 而不是 TagLib 的想法。最优雅的方式是:使用 Java 注释。这个想法是,设计师或任何人都可以在没有任何 taglib 的情况下制作 HTML,只需使用带有 id 或 name 的“标准”HTML 标签,并调用 Javascript。这样任何所见即所得都可以使用,开发人员不必关心 HTML 格式或它的设计方式。在许多(至少是开源的)WYSIWYG 中,不会在最终结果中显示标记库(或有它的模板),因此很难“预览”。另一个原因是,开发人员应该知道 Java 和 HTML/TagLibs 不应该是必须的,因为我们有 CSS 和 AJAX。

它应该像这样工作:

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 */
    ...
}

页面.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),您认为这是一个有效的想法吗?

4

4 回答 4

2

当我看到你的主题标题时,我想:

您不能使用 Ajax 代替 taglib。AJAX 是客户端上的 javascript,而 taglib 是服务器上的 java 代码。

读完你的帖子后,我想,啊,他该怎么做[链接文本] [1]做什么

但后来不完全一样。

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

于 2008-10-29T14:37:00.350 回答
1

第一印象是......糟糕,如果不学习你的(新的、不同的、非标准的)做事方式,拿起这个的人将不知道他们在看什么。您可以通过实现一个带有 bean(值对象)的标签来做类似的事情,并且可能会进行一些小的反射/注释检查以发出正确的 html,这样您就可以省去很多心痛。

使您的值对象实现一个简单的接口,您的标签将使用该接口来提取和格式化 html,并且您可能会在 1/2 或更少的工作中获得 80-90% 的目标。

于 2008-10-29T20:12:11.563 回答
1

第一印象是,WTF。进一步阅读后,我的印象是您正在尝试以不同的方式解决“关注点分离”问题。对您的方法的一些观察。

  1. 需要启用客户端脚本,因此无法访问可访问性指南。
  2. 重新发明轮子:许多 Web 框架,如 Tapestry、Wicket 都试图解决这些问题,并做出了值得称道的工作。
  3. 关于将 Java 绑定到 HTML 的评论,代码示例并没有很清楚地传达这个想法。formize() 似乎创建了 UI,这意味着您已将 UI (HTML) 编码到 java 中(坏主意?可能不是 NakedObjects 尝试为您提供 UI 的域模型,如果要编写特定于页面的代码,可能是的)
  4. validate() 是在 onSubmit() 上调用的,为什么要异步处理!!除此之外,使用令人讨厌的 java 脚本已经过时了(再次分离关注点)
  5. 您关于阻止所见即所得标签库的论点虽然是有道理的,但并不完全有效。标签不能用于组成其他标签,每个标签都是一个独特的实体,要么处理行为,要么发出一些 html 代码。您的论点适用于第二种情况。但是,如果我正确理解了您的formalize(),那么您也在做同样的事情!

很高兴听到一些新想法,欢迎来到 SO。此外,请使用编辑问题选项,直到您获得足够的声誉来添加评论。添加答案不是正确的方法!

于 2008-10-30T19:02:17.163 回答
1

这个想法有一些优点,如果我理解正确的话。

您可以使用 AOP 来修改实际会为页面调用的 servlet。然后,servlet 将使用注释返回 html。

这样程序员就看不到 html 生成,如果你有一个标准的 javascript 库,那么它可能会工作。

但是,仅仅因为它有效并不意味着你应该这样做。

如前所述,有许多框架可以对程序员隐藏 javascript,例如 JSF,它基本上是标记库和不同的导航方案。

我记得使用 beehive 项目做类似的事情,它是注释驱动的,所以我基本上可以在 java 中做所有事情,并且它在几年前生成了 javascript。:)

于 2009-09-01T00:44:21.520 回答