简答:是的,你必须添加它们。
长答案:您可以创建自定义代码来做到这一点,但我怀疑这是值得的努力。
使用JSF,您可以使用非HTML标签,该标签具有与其关联的一种组件类型 - 例如,h:inputText
对应于类HtmlInputText
- ,因此它知道要实例化的类。
使用Wicket,HTML文件仅包含(有一些例外)HTML标签,并且您必须实例化每个标记为标记的标记的具体组件,因为它不能确切地知道是否<span wicket:id='xyz'>
表示Label
,FeedbackPanel
,WebMarkupContainer
或某个自定义组件。
通过JSF,您可以在标记中做什么,使用Wicket,您可以在Java代码中执行哪些操作,即构建组件树,将组件绑定到属性以及处理事件。它将所有内容保存在一个文件中(你不必为每个模板文件创建一个类),它有很多很多缺点(有些人可能认为它有一些优点,我会离题)。
你的页面永远不是一个简单的表单,它什么都不做。您想要转换和验证输入,您想要处理提交,您想要使用Ajax更新组件。使用JSF,您可以在(不可编译的,类型不安全的,糟糕的,不可重构的)模板中执行所有这些操作,使其充满了表达式,配置标签和 - gawd禁止 - 业务逻辑。
如果Wicket对此有支持(并且对于您自己构建此附加组件需要具备灵活性),则必须添加大量额外的注释(特殊的非标准标签和属性),声明要实例化的类,要更新的模型,要执行的验证等等,折中框架的两个优点,干净的HTML模板以及视觉和逻辑之间的清晰分离。
一个框架,试图在模板中做更多的事情,同时保持比JSF更臃肿(反正不是那么难)是Apache Tapestry。但是从its tutorial中可以看出,您仍然不得不使用非标准标签,并遵循任意约定将模板绑定到代码上(您可能会喜欢它,但是如果出现这种情况,您可以尝试使用Baaad,对不起:P )。
这是一个很好的答案,并解释了很多。我可能会重新思考我是如何处理我的问题的,似乎我正在使用wicket,因为我会使用JSF,而且成本并未使用任何一方的强项。 – Sean 2012-08-21 13:06:59