我在考虑使用Ajax而不是TagLib的想法。最优雅的方式是:使用Java Annotation。 这个想法是,设计师或任何人都可以制作没有任何taglib的HTML,只需使用带有id或name的“标准”HTML标签,并调用Javascript。这样可以使用任何WYSIWYG,开发人员不必关心HTML格式或其设计方式。 在许多(至少是开源)中,WYSIWYG不会在最终结果中显示taglib(或者有一个模板),因此很难“预览”。其他原因是,开发人员应该知道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 */
...
}
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 onload="Jay2J.formalize(this)">
</form>
</body>
</html>
这样Annotation(没有XML,就像HTML只是另一个文件修改而XML不是Java的方式)将定义如何处理HTML。这样开发人员可以停止使用HTML开发并只使用JAVA(或JavaScript),你认为这是一个有效的想法吗?
答案 0 :(得分:2)
当我看到你的主题标题时,我想:
您无法使用Ajax代替taglib。 AJAX是客户端上的javascript,而taglib是服务器上的java代码。
读完你的帖子之后我想,啊他怎么做[链接文字] [1]呢
但后来却没有相同的说法。
答案 1 :(得分:1)
第一印象是......哎呀,如果不学习你的(新的,不同的,非标准的)做事方式,选择这个的人就不会知道他们在看什么。您可以通过实现带有bean(值对象)的标记来执行类似的操作,并且可能会执行一些小的反射/注释检查以发出正确的html,并且您将为自己节省很多心痛。
让你的价值对象实现一个简单的界面,你的标签将用它来提取和格式化html,你可能会得到80-90%的你想要的工作量减去1/2或更少。< / p>
答案 2 :(得分:1)
第一印象是,WTF。在进一步阅读之后,我得到的印象是你试图以不同的方式解决“关注点分离”问题。关于你的方法的一些观察。
很高兴听到一些新想法,欢迎来到SO。此外,请使用编辑问题选项,直到您获得足够的声誉来添加评论。添加答案不是正确的方法!
答案 3 :(得分:1)
如果我理解正确,这个想法有一些优点。
您可以使用AOP修改实际为页面调用的servlet。然后,servlet将使用注释返回html。
这样程序员看不到html生成,如果你有一个标准的javascript库,那么它可能会有效。
但是,仅仅因为它起作用并不意味着你应该这样做。
如上所述,有许多框架可以隐藏程序员的javascript,例如JSF,它基本上是taglibs和不同的导航方案。
我记得使用蜂箱项目做类似的事情,它是注释驱动的所以我基本上可以用java做一切,并且它在几年前生成了javascript。 :)