【问题标题】:Can someone describe the component-based paradigm in java web programming?有人可以描述 Java Web 编程中基于组件的范例吗?
【发布时间】:2010-11-01 04:34:11
【问题描述】:

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

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

谁能解释一下?

提前感谢您的想法。

TDR

【问题讨论】:

    标签: jsf components


    【解决方案1】:

    我认为一个好的解释需要付出很多努力。我建议您首先掌握您的 Java 技能,这样您就可以理解稍后在尝试从网络上学习教程时会遇到的代码示例,甚至最好买一本书。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        我们需要做的第一件事就是将您的表单分解为符合逻辑的部分。如果我们知道我们将在很多不同的地方重复使用这个精确的表格,也许这个表格本身就是一个合乎逻辑的部分。在这种情况下,我们可以创建一个组件来呈现整个表单并将其绑定到一个像“Contact”这样的 bean。这样,任何时候您需要使用该表单,您都可以将其转储,将其绑定到 Contact bean(具体方式取决于您的框架),然后从那里开始。但这会使这成为一个相当乏味的例子。 :)

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

        第二,我们有出生日期。最简单的方法是,我们可以创建一个 h:inputText 字段并添加一个 f:converter 元素,这样当我们将它绑定到 bean 时,它就会出现一个日期。您可以将其扩展为一个完全交互式的日历小部件,包括 Java Script 等等。查看 IceFaces 和 RichFaces 以获得一些很好的示例。但同样的核心概念仍然存在:您将绑定到日期对象的单个组件。

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

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

        这只是表面问题,但最广泛的笔触类似于任何大型程序:确定最小的、符合逻辑的部分并在使用它们构建更大的部分之前构建它们。

        【讨论】:

        • 这是一个经过深思熟虑的答案。
        猜你喜欢
        • 2012-07-18
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        • 2010-11-17
        • 2017-03-21
        • 2021-12-26
        • 1970-01-01
        • 2021-03-13
        相关资源
        最近更新 更多