简短回答:是的,您必须添加它们。
长答案:您可以创建自定义代码来执行此操作,但我怀疑这是否值得。
使用 JSF,您可以使用非 html 标记,该标记具有与之关联的一种组件类型(例如,h:inputText
对应于类HtmlInputText
),因此它知道要实例化哪个类。
使用 Wicket,HTML 文件仅包含(除了少数例外)HTML 标记,并且您必须为wicket:id
添加到标记的每个标记的标记实例化一个具体组件,因为它无法确定是否<span wicket:id='xyz'>
表示 a Label
、 a FeedbackPanel
、 a WebMarkupContainer
,或一些自定义组件。
使用 JSF,您可以在标记中执行 Wicket 中的 Java 代码操作,即构建组件树、将组件绑定到属性以及处理事件。它将所有内容保存在一个文件中(您不必为每个模板文件创建一个类),它有很多很多缺点(有些人可能认为它有一些优点,我离题了)。
您的页面绝不仅仅是一个什么都不做的简单表单。您想要转换和验证输入,想要处理提交,想要使用 Ajax 更新组件。使用 JSF,您可以在(不可编译、类型不安全、工具不良、不可重构)模板中完成所有这些工作,从而使其因表达式、配置标签和 - gawd forbid - 业务逻辑而变得臃肿。
如果 Wicket 对此提供支持(而且,它具有您自己构建此附加组件所需的灵活性),您将不得不向标记、声明要实例化的类、要更新的模型、要执行的验证等,损害了框架的两个优点、干净的 HTML 模板以及视觉和逻辑之间的清晰分离。
Apache Tapestry是一个尝试在模板中做更多事情,同时又比 JSF 不那么臃肿的框架(这并不难)。但是从它的教程中可以看出,您最终仍然不得不使用非标准标签并遵循任意约定将模板绑定到代码(您可能喜欢它,但如果是这种情况,您有baaad味,抱歉: P)。