Apache Wicket 的优势是啥? [关闭]

Posted

技术标签:

【中文标题】Apache Wicket 的优势是啥? [关闭]【英文标题】:What are the advantages of Apache Wicket? [closed]Apache Wicket 的优势是什么? [关闭] 【发布时间】:2010-10-07 08:10:58 【问题描述】:

我不是 Java 开发人员,所以我可能会弄错一些术语……但是。

我集成的一个应用程序正在从 Spring 迁移到 Wicket。虽然它不应该影响我与它的集成,但我想知道他们为什么要这样做?

据我所知,Spring 是更流行的框架。我对它一无所知,除了它很受欢迎。我确实阅读了 Wicket 页面,Wicket 看起来非常简单明了。

Wicket 有哪些优势?

在我看来,改变你的整个框架将是一些工作,所以我想知道 Wicket 是否提供了 Spring 不提供的东西?

【问题讨论】:

【参考方案1】:

检票口岩石!

Spring(其中的 UI 部分称为 Spring MVC)似乎是一个巨大的“做所有事情,包括厨房水槽”的框架类型,当我开始评估 Spring 时,它对我来说显得庞大而笨重(和 Spring MVC)。在我看来,今天 Spring 似乎并不专注于任何一件事。最初我认为它只是一个依赖注入框架,但它很快发展为尝试成为所有人的一切,并且失去了简单性。

我阅读的有关 Spring 的书籍中的示例包含太多 XML 配置。 XML 配置文件中的错误比 Java 代码中的错误更难调试和修复,您可以使用调试器单步执行。

在 Java 代码而不是 XML 中声明内容有什么问题?从什么时候开始有人下令无论如何都应该在 XML 中声明所有内容?如果您喜欢在复杂的 XML 配置文件的海洋中畅游,那么请选择 Spring。如果您喜欢完成工作并提高工作效率,请选择 Wicket。

Wicket 非常专注于成为最好的基于 Java 的 Web 应用程序开发 UI 框架。它不会试图将您锁定在任何特定的依赖注入框架或任何特定的持久性框架中(将它与 JDO/JPA、DataNucleus、Hibernate 等一起使用)。

它的重点显然是在 UI 上,但您可以使用任何您喜欢的依赖注入框架(您不必使用 Spring 的 DI,但您可以根据需要使用)。我们甚至将我们自己的 DI (http://www.expojo.com) 与 Wicket 一起使用,一切都很时髦。

【讨论】:

【参考方案2】:

以下是 apache wicket 的一些功能:

POJO 组件模型

Wicket 中的页面和组件是支持封装、继承和事件的真实 Java 对象。

易于开发

因为 Wicket 是 Java 和 html,所以您可以利用您对 Java 的了解或您最喜欢的 HTML 编辑器来编写 Wicket 应用程序。

关注点分离

Wicket 不会将标记与 Java 代码混合,也不会向标记文件添加特殊语法。 HTML 和 Java 的世界是平行的,并且仅通过 Wicket id 相关联,Wicket id 是 HTML 中的属性和 Java 中的组件属性。由于 Wicket HTML 只是 HTML,而 Wicket Java 也只是 Java,因此编码人员和设计人员可以在很大程度上独立工作,而无需依赖任何特殊工具。

安全

Wicket 默认是安全的。 URL 不会暴露敏感信息,并且所有组件路径都是会话相关的。必须采取明确的步骤在会话之间共享信息。此外,URL 加密允许高度安全的网站。

透明、可扩展的集群支持

所有 Wicket 应用程序都将自动在集群上运行,无需额外工作。一旦了解了瓶颈,Wicket 就可以调整页面状态复制。下一版本的 Wicket 将支持客户端模型以实现零状态可扩展性。

透明后退按钮支持

Wicket 支持可配置的页面版本管理。当用户从浏览器中的后退按钮访问的页面提交表单或点击链接时,Wicket 能够将页面对象恢复到页面最初呈现时的状态。这意味着您可以编写支持后退按钮的 Web 应用程序,而且工作量很少。

多标签和多窗口支持

Wicket 提供了一种简单的方法来编写支持多窗口和多标签使用的应用程序,允许开发人员在用户打开新的浏览器窗口或标签时做出正确的反应

可重用组件

Wicket 中的可重用组件特别容易创建。您不仅可以使用 Java extends 关键字扩展现有组件,还可以创建将一组组件关联为可重用单元的 Panel 组件。

简单、灵活、可本地化的表单验证

在 Wicket 中编写和使用验证器很简单。自定义和本地化验证错误消息的显示和内容也很容易。

类型安全会话

Wicket 消除了手动管理 HttpSession 属性的需要。页面和组件对象透明地存储在会话中,您的应用程序也可以创建具有类型安全属性的自定义会话子类。会话中存储的所有对象都可以自动参与集群复制。

工厂可定制

Wicket 具有很强的可扩展性。大多数操作都可以通过工厂或工厂方法自定义。

可拆卸模型

Wicket 中的模型对象在集群中的内存和网络使用方面非常轻量级。使用模型时,它可以“附加”,用来自持久存储的信息填充自己。当模型不再使用时,可以重置瞬态信息,减小对象的大小。

边框组件

Wicket Border 组件能够以可重用的方式装饰页面。这对于继承常见的导航结构或布局特别有用。

支持所有基本 HTML 功能

Wicket 支持图像标签、链接、表单以及您在 Web 应用程序开发中习惯使用的所有其他内容。

属性的编程操作

Wicket 组件可以以编程方式更改任何 HTML 标记属性。

自动转换

表单验证后,可以使用 Wicket 转换器更新模型。大多数普通转换都是内置的,很容易编写新的转换器。

动态图像

Wicket 使图像的使用、共享和生成变得非常容易。只需实现一个绘制方法即可创建动态图像。

可分页列表视图

Wicket 中的ListViews 非常强大。您可以在 ListView 行中嵌套任何类型的组件,甚至是其他 ListView。 PageableListView 支持大型列表的导航链接。

树组件

用于导航和选择节点的开箱即用的树组件。

本地化

HTML 页面、图像和资源字符串都可以本地化。

【讨论】:

【参考方案3】:

与其他流行的 Java Web 框架相比,Wicket 的另一个优势是它允许您创建模块化和可扩展的 Web 应用程序。这在您设计基于 Web 的产品时特别有用,您打算通过在部署时以插件的形式添加额外的功能和页面来扩展它,并消除对产品核心功能/来源的影响。这是一篇非常好的文章。

http://www.infoq.com/articles/modular-wicket

【讨论】:

【参考方案4】:

Spring 仅在页面级别为您提供 MVC 设计模式——确实是一个非常粗略的粒度级别。相比之下,Wicket 为您提供了单个组件级别的 MVC 设计模式(就像 Swing 为胖客户端编程提供的那样)。使用 Spring MVC,表单的所有数据对于整个前端 servlet 都是全局的,因此信息隐藏、松散耦合或紧密内聚的机会并不多。使用 Wicket,您的显示逻辑可以更加模块化——由 componentA 管理的数据不需要对 componentB 的代码可见。

较小的粒度级别使得在多个不同的网页甚至网络应用程序中重用显示代码变得更加容易。

此外,由于组件配置是在 Java 而不是 XML 中完成的,因此它们可以在运行时动态配置,从而获得更大的功能和灵活性(与大多数其他面向组件的框架相比,例如 ASP .NET Web 窗体或 Java Server Faces)。

【讨论】:

【参考方案5】:

我同意目前提供的答案。没有提到的是以下几点,这是 Wicket 专注于 Java 代码的 Web 应用程序开发方法的结果:-

Wicket 开发不涉及编写 JSP。 无需编写 javascript 即可开发 AJAX 组件。

我还没有遇到任何其他采用这种以 Java 为中心的方法的框架。我使用过的所有其他工具(Struts、Spring)都涉及 JSP 开发。

对我来说,Wicket 的一大优势是专注于 Java,以及丰富的开发环境工具(如 Eclipse)的可用性。此外,业务逻辑与应用程序的表示方面非常清晰地分离。

【讨论】:

【参考方案6】:

我喜欢 Wicket 的一些优点:

    简单 - 学习曲线很小,特别是如果您来自 Swing 学校。 关注点的干净分离 - 网页设计师不需要对代码了解太多。

    易于部署。

    Here is my blog to show hello world codes in Wicket

【讨论】:

【参考方案7】:

您可以在 Wicket In Action 的免费第一章中了解使用 Wicket 的优势:http://www.manning.com/dashorst/

简而言之,当您正在开发的应用程序相对复杂时,Wicket 是一个很棒的框架,您希望它是可维护的,能够扩展团队并利用重用。面向对象编程被证明是一种非常有用的 UI 编程范式,但不幸的是,大多数用于开发 Web 应用程序的 Java 框架,包括 Spring MVC,只支持一种非常程序化的编程模型,它们在其中标记 MVC 术语以使其听起来很酷(但事实上,由于它们支持的粒度是请求/响应往返而不是自包含的小部件,因此 MVC 确实具有误导性)。

Spring 的 DI 部分很棒,您可以轻松地与 Wicket 一起使用。

【讨论】:

【参考方案8】:

Spring 不仅仅是 Spring MVC。您可以(并且可能应该)使用 Spring with Wicket。

【讨论】:

【参考方案9】:

我经常在圈子里吹捧的优点是:

    您的 html 可以完全符合 xhtml - 表示和逻辑之间的分离非常好,因为您的表示/html 层需要了解的关于 wicket 的唯一信息是标准 html 标记中的 wicketid 属性。这对于您团队中几乎没有实际 Java 工作的 html/css/javascript 客户端人员来说非常棒。没有其他基于 Java 的 Web 框架可以声称这一点,afaik。 没有任何特定于检票口的 xml 配置 - 一切都可以在源代码中完成,您的 .war 的标准 web.xml 几乎不需要做任何事情 基于组件的开发非常容易上手 - 特别是如果您有非网络背景(例如摇摆程序员)。它比 mvc 更鼓励重用,imo。

【讨论】:

我注意到检票口网站上的第 1 点。它看起来非常干净和简单。我在想“asp.net 应该是这样的”(我是 .net 开发人员)。 第 1 点 - 如果你正在开发一个中等大小的应用程序,你的 html 最终会带有 标签。因此,您的 HTML 开发人员仍然需要了解 Wicket 标记 - 请参阅 cwiki.apache.org/WICKET/wickets-xhtml-tags.html 以获取列表。所以不像声称的那样干净。 Tapestry [tapestry.apache.org/] 也有很长一段时间纯 html 模板。【参考方案10】:

Spring 比 Wicket 更包罗万象。

Wicket 是一个 Java Web UI 框架。 Spring 也有一个,以及用于持久性、远程处理、安全性、消息传递等的模块。

Spring 建立在依赖注入和 AOP 之上。 Wicket 两者都没有。

我没用过,但应该很简单。我不能说 Spring 是更容易还是更难。

除了 Web 应用程序之外,您还可以在很多情况下使用 Spring。

【讨论】:

"Spring 建立在依赖注入和 AOP 之上。Wicket 两者都没有。"值得一提的是,没有什么可以阻止您在 spring mvc 之外使用 any spring 模块与 wicket... 或任何 DI、AOP 框架,就此而言。 好点,鲸鱼。我同意。这将包括 Guice 或 PicoContainer、AspectJ 等。

以上是关于Apache Wicket 的优势是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Wicket中表单组件的国际化标签

(Apache Wicket) 从 js 函数设置 java 属性

带有 Swagger UI 的 Apache Wicket REST

Sails.js 与 Meteor - 两者的优势是啥? [关闭]

在 Java 中,流相对于循环的优势是啥? [关闭]

有没有办法在 Apache Wicket 中使用 HTML 模板创建表单组件