2012-08-15 44 views
2

我正在尝试使用wicket构建一个简单的应用程序,并且至今留下了深刻的印象。我一直利用Component类来根据用户输入或模型来确定页面上元素的行为。我看到了与JSF的组件模型相似之处,但发现了更易于管理的Wicket生命周期。Wicket Components - 必须每次添加()?

我无法理解的是,必须将每个组件的每个组件添加到树中:id在页面上提到,特别是对于没有任何子级的组件。当树已经在标记中被定义时,它似乎被强制在java代码中建立树。我错过了什么?

编辑

我应该举一个例子。我有一个输入框的标签,在某些情况下,我希望能够修改。 95%的时间文本和属性我在标记中的标签将罚款。

回答

8

简答:是的,你必须添加它们。

长答案:您可以创建自定义代码来做到这一点,但我怀疑这是值得的努力。

使用JSF,您可以使用非HTML标签,该标签具有与其关联的一种组件类型 - 例如,h:inputText对应于类HtmlInputText - ,因此它知道要实例化的类。

使用Wicket,HTML文件仅包含(有一些例外)HTML标签,并且您必须实例化每个标记为标记的标记的具体组件,因为它不能确切地知道是否<span wicket:id='xyz'>表示LabelFeedbackPanelWebMarkupContainer或某个自定义组件。

通过JSF,您可以在标记中做什么,使用Wicket,您可以在Java代码中执行哪些操作,即构建组件树,将组件绑定到属性以及处理事件。它将所有内容保存在一个文件中(你不必为每个模板文件创建一个类),它有很多很多缺点(有些人可能认为它有一些优点,我会离题)。

你的页面永远不是一个简单的表单,它什么都不做。您想要转换和验证输入,您想要处理提交,您想要使用Ajax更新组件。使用JSF,您可以在(不可编译的,类型不安全的,糟糕的,不可重构的)模板中执行所有这些操作,使其充满了表达式,配置标签​​和 - gawd禁止 - 业务逻辑。

如果Wicket对此有支持(并且对于您自己构建此附加组件需要具备灵活性),则必须添加大量额外的注释(特殊的非标准标签和属性),声明要实例化的类,要更新的模型,要执行的验证等等,折中框架的两个优点,干净的HTML模板以及视觉和逻辑之间的清晰分离。

一个框架,试图在模板中做更多的事情,同时保持比JSF更臃肿(反正不是那么难)是Apache Tapestry。但是从its tutorial中可以看出,您仍然不得不使用非标准标签,并遵循任意约定将模板绑定到代码上(您可能会喜欢它,但是如果出现这种情况,您可以尝试使用Baaad,对不起:P )。

+0

这是一个很好的答案,并解释了很多。我可能会重新思考我是如何处理我的问题的,似乎我正在使用wicket,因为我会使用JSF,而且成本并未使用任何一方的强项。 – Sean 2012-08-21 13:06:59

0

我有一个输入框的标签,在某些情况下,我希望能够修改。 95%的时间文本和属性我在标记中的标签将罚款。

您可以尝试在模型中包装标签的内容,将该标签包含在容器中并重新绘制容器(target.add(container);)。

0

离开你应该添加他们。检票功能最强大的功能之一是允许你制作一个可重用的组件,尤其是html组件。

有盖房一百万的方式,但大多数人不会考虑 建筑马桶,浴缸,并从头玻璃窗。 为什么要自己建造一个厕所,当你可以购买一个比你购买一个厕所花费更少的钱时,你会花费你去建造一个厕所,当它不太可能你会比你在一家商店买到更好的产品吗?以同样的方式,大多数软件工程师试图重复使用软件模块。 “制造或购买”决定涵盖的不仅仅是模块是否可用;一般而言,重复使用软件模块更便宜,并且导致更强大的系统。 。重用软件也意味着你不必一遍又一遍代码的 相同的功能(检票行动:曼宁)

所以有一个可重复使用的Wicket页面,检票口只需要一个HTML页面显示它的组件层次结构或它们的位置。这些组件的类型和型号留给程序员。

+0

不错的答案兄弟 – uma 2013-11-27 07:00:03

相关问题