有人可以在java web编程中描述基于组件的范例吗?

时间:2009-06-08 13:54:47

标签: jsf components

我正在尝试学习java web编程。我来自perl脚本编写背景,并且对Java知之甚少,更不用说JSF / Seam / EJB3.0了。我在这个非常陡峭的学习曲线上取得了很多进展,但是我认为有一些大的概念问题会妨碍我。

最近我把注意力转向学习JSF。通常对JSF的讨论包括对基于组件的Web编程的描述,但似乎假设一个人具有其他Web编程范例的经验。我有兴趣在其他范例的背景下更全面地讨论这种基于组件的范式。

有人可以解释一下吗?

提前感谢您的想法。

TDR

3 个答案:

答案 0 :(得分:2)

基本思想只是面向对象设计的扩展:分离程序的关注点。就像你可以制作几个不同的PERL脚本并将它们串在一起工作一样,我们将制作几个不同的JSF组件并将它们串在一起以便工作。

我们以一个简单的注册表格为例。我想知道你的姓名,你的出生日期,你的地址,并将这一切都提交到后端去做工作。

我们需要做的第一件事就是将你的表格分解成逻辑部分。如果我们知道我们要在很多不同的地方重用这个确切的形式,那么这个形式本身可能是一个合乎逻辑的部分。在这种情况下,我们可以创建一个组件来渲染整个表单并将其绑定到像“联系人”这样的bean。这样,只要你需要使用表单,就可以将其转储,将它绑定到Contact bean(如何依赖于你的框架)并从那里开始。但这会使这个例子变得相当沉闷。 :)

根据我的估计,我将姓名,出生日期和地址视为三个独立的逻辑单位。名字可能很简单。只是一个标准的文本输入。所以我们可以使用h:inputText元素,或者框架的首选版本,并将其绑定到bean的名称字段。

其次,我们有出生日期。最简单的是,我们可以创建一个h:inputText字段并添加一个f:转换器元素,这样当我们将它绑定到bean时,它就会出现一个日期。您可以将其扩展为完全交互式日历窗口小部件,包括Java Script以及不支持的内容。查看IceFaces和RichFaces的一些好例子。但是同样的核心概念仍然存在:您将与日期对象绑定的单个组件。

第三,我们有地址。这是组件的绝佳选择,因为您可能需要知道许多不同页面中的地址。它也比单个输入复杂得多。你需要结合多个输入,验证和有趣的ajaxy东西来组成一个单一的内聚单元。但是,使用它的开发人员只需要使用它 <foo:address value="#{BarBean.address}"/> 可能还有其他一些选择。

这种关注点的分离不仅是基于组件的Web设计的核心,也是面向对象编程本身的核心。有很多工具可以让这更容易! Facelets就是一个很好的例子。您可以将基本布局分离到自己的工作表中,只需通过ui:define元素注入有用的内容即可。您可以创建组合组件,使您可以快速创建更多有用的组件,而无需深入研究JSF组件框架;使用Facelets组合组件的地址示例非常简单。 IceFaces是另一个很好的例子。它处理各种AJAXy类型输入,重绘和更新,而不必担心它是如何工作的(大多数情况下。)让我专注于表单要完成的内容,而不是如何完成表单。

这只是划伤表面,但最广泛的笔划类似于任何大型程序:识别最小的逻辑部分并构建它们,然后再使用它们构建更大的部分。

答案 1 :(得分:0)

我认为一个好的解释需要付出很多努力。我建议你直接获得你的java技能,这样你就可以理解以后当你尝试从网上学习教程或者更好地购买书籍时会遇到的代码示例。

简而言之: JSF尝试为您提供基于Web的应用程序的桌面应用程序的编程体验。 您可以重用,而不是拥有大型JSP,而是拥有许多较小的组件。 通过将DOM组件的状态传入和传出服务器,即使您执行实际请求(而不仅仅是ajax调用),页面的状态也会尽可能地保留。

答案 2 :(得分:0)

JSF和Java EE通常以这样的方式设计,即大型团队可以将任务分解为更模块化的形式。

因此,对于组件,组件不允许多个人在同一个.jsp或.xhtml页面上工作,而是使用相同的Java支持bean类,组件允许人们在相同的应用程序上工作,而不会绊倒彼此的脚。