`
qtlove
  • 浏览: 16512 次
  • 性别: Icon_minigender_1
  • 来自: Jiangsu, China
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JBoss Seam:一个深度集成框架(二)

阅读更多

作者: Michael Yuan 翻译: Richard 来源: TSS

作者简介
: Michael Yuan,技术专家,《JBoss Seam: Simplicity and Power Beyond Java EE》、《Lightweight Java Web Application Development》等书的作者,软件顾问,目前就职于JBoss。

摘要: 本文介绍了JBoss Seam如何在JSF中进行JPA延迟加载和Hibernate验证以及JBoss Seam对Ajax的支持。

本文是《JBoss Seam:一个深度集成框架》一文的第二部分,JBoss Seam中文站将在近期发布该文的第三部分。

支持在JSF中进行JPA延迟加载

ORM框架重要特征之一就是支持相关对象的”延迟加载”。没有延迟加载,即使简单的对象查询也有可能顺带出大量数据到结果集中,因为在映射对象图中,可能所有的表都是潜在关联的。

例如,在显示订单列表的Web应用程序中,你可能需要在控制器中查询订单对象。然后,当页面被加载后,你可能需要显示列表中相应的条目。

在页面加载的时候,我们将”延迟加载”订单条目到订单对象中,而不会在控制器中查询订单对象时,就将所有与订单关联的对象都加载到订单对象中。

然而,在传统的MVC框架中应用”延迟加载”可不是一件容易的事情。在Seam之前的MVC框架中,控制器会在持久化环境中通过会话在事务中运行查询,然后在事务提交时关闭会话。所以,当控制器退出、网页显示完成后,持久化环境将变成不可用状态。

这样,在以前的MVC框架中,如果想在显示页面中试图”延迟加载”数据,持久化引擎将抛出”lazy initialization exception”异常。

你可以通过”Open Session In View”模式实现”延迟加载”--在页面生成阶段保持持久会话。但是应用这种模式,需要在Web框架和持久层框架之间编写大量的整合代码。

Seam默认支持”Open Session In View”。所有的Seam组件,除了EJB3中的无状态会话Beans以外,都是有状态的。在开始从UI事件调用数据库操作一直到响应页面生成期间, Seam将维持一个打开的持久会话。在Seam应用中,开发人员不需要编写额外的代码来实现”延迟加载”。

在JSF输入页面中支持Hibernate验证

在多层企业级应用中,Web框架和ORM持久层框架通常会有不同的数据验证机制。Web框架在Web表单被提交时验证用户输入,而持久层框架在保存数据进数据库之前验证数据。在大多数情况下,它们显得多余。

Seam允许你在实体Beans中直接注解数据验证约束,这样使用与实体Beans相联系的JSF输入框时,同样的验证约束将应用于输入数据。

下面的例子中,Person对象的名字必须由两个单词组成,并且年龄必须在3到100岁之间。

@Entity

@Name(”person”)

@Table(name=”extperson”)

public class Person implements Serializable {

private long id;

private String name;

private int age;

@Id @GeneratedValue

public long getId() { return id;}

public void setId(long id) { this.id = id; }

@NotNull

@Pattern(regex=”^[a-zA-Z.-]+ [a-zA-Z.-]+”,

message=”Need a firstname and a lastname”)

public String getName() { return name; }

public void setName(String name) {this.name = name;}

@NotNull

@Range(min=3, max=100,

message=”Age must be between 3 and 100″)

public int getAge() { return age; }

public void setAge(int age) { this.age = age; }

}

下面的JSF页面将自动”包装”一些验证逻辑。如果用户提交无效值,将重新显示页面,同时高亮显示无效的字段。

<s:validateAll>

Your name:<br/>

<s:decorate>

<h:inputText value=”#{person.name}”/>

</s:decorate>

Your age:<br/>

<s:decorate>

<h:inputText value=”#{person.age}”/>

</s:decorate>

</s:validateAll>

你可以通过简单的JSF facets和CSS样式配置这些高亮显示的错误信息。也可以在无效字段前加入有CSS样式修饰的错误提示图片。如下所示,当验证失败时,<s:message/>将显示验证注解中的信息属性。

<f:facet name=”beforeInvalidField”>

<h:graphicImage styleClass=”errorImg” value=”error.png”/>

</f:facet>

<f:facet name=”afterInvalidField”>

<s:message styleClass=”errorMsg” />

</f:facet>

<f:facet name=”aroundInvalidField”>

<s:div styleClass=”error”/>

</f:facet>

使用基于Ajax的JSF控件,你无需提交任何表单,就可以进行输入字段的验证。

多种方式使用Ajax

作为一个现代的应用程序框架,Seam为Ajax应用提供了最好的支持。

在Seam中,你可以通过很多方式使用Ajax。初学者可以使用Seam集成的Ajax JSF组件包,比如Ajax4jsf、RichFaces和IceFaces。它们提供了一系列Ajax功能的JSF控件,包括输入框、数据表格、交互面 板、拖放面板等,你可以直接将它们用在你的页面上。这些Ajax控件允许你开发Ajax Web应用程序,而无需写一行JavaScript代码。Seam已经帮你做好了所有和Ajax整合的工作,使得建立Ajax应用比在单纯的JSF环境中 更容易。下面的例子显示了如何使用Ajax数据输入框,当你离开输入框时,数据将被验证,同时无效的字段将高亮显示。

<s:validateAll>

Your name:<br/>

<a4j:outputPanel id=”nameInput”>

<s:decorate>

<h:inputText value=”#{person.name}”>

<a4j:support event=”onblur” reRender=”nameInput”/>

</h:inputText>

</s:decorate>

</a4j:outputPanel>

Your age:<br/>

<a4j:outputPanel id=”ageInput”>

<s:decorate>

<h:inputText value=”#{person.age}”>

<a4j:support event=”onblur” reRender=”ageInput”/>

</h:inputText>

</s:decorate>

</a4j:outputPanel>

</s:validateAll>

考虑到开发人员想直接使用JavaScript取代JSF控件,Seam同样也整合了JavaScript和服务器端组件。你可以像调用本地 JavaScript方法一样调用Seam组件的方法并且在本地使用返回值。开发人员也可以通过Seam服务整合其他流行的JavaScript库。例 如,下面的代码显示了如何通过Seam组件整合Dojo的”内嵌文本编辑器”,当你双击”Hello World”文本时,将出现内嵌的文本编辑器;编辑完成后,输入值将被传回服务器处理。

<script language=”javascript”>

// Seam.Remoting.setDebug(true);

// don’t display the loading indicator

Seam.Remoting.displayLoadingMessage = function() {};

Seam.Remoting.hideLoadingMessage = function() {};

// Get the “manager” Seam component

var manager = Seam.Component.getInstance(”manager”);

function init () {

var commentEditor = dojo.widget.byId(”comment”);

commentEditor.onSave = submitComment;

}

function submitComment (newValue, oldValue) {

manager.setComment (newValue);

}

dojo.addOnLoad(init);

</script>

<div id=”comment” dojoType=”inlineEditBox”>Hello Seam</div>

下面代码显示了通过JavaScript远程调用访问Manager组件。

@Name(”manager”)

public class Manager {

@In @Out

private Person person;

public void setComment (String comment) {

person.setComment (comment);

}

… …

}

审校:骆驼

原创文章如转载,请注明:转载自JBoss Seam中文站
[ http://www.jbossseam.com/ ]
本文链接地址:http://www.jbossseam.com/2007/11/03/introduction-to-jboss-seam-part2/

分享到:
评论

相关推荐

    Jboss seam 一个深度集成框架

    ### JBoss Seam:一个深度集成框架 #### 一、JBoss Seam 的产生背景及意义 JBoss Seam 是一款由 JBoss 提供的开源框架,它致力于解决 JavaEE 应用程序开发过程中面临的诸多挑战,尤其是当涉及到多个不同框架时所...

    JBoss Seam

    本书聚焦于JBoss Seam框架,旨在为读者提供一个全面、深入的理解,以掌握其在企业级应用开发中的应用与优势。 ### JBoss Seam框架概览 JBoss Seam是一个开源的应用框架,它基于Java EE标准,但通过引入一系列创新...

    深入浅出JBoss Seam

    Seam不仅仅是一个集成框架,它拥有自己的状态管理机制,允许框架之间通过注解和EL表达式实现深度整合。Seam的开发者对第三方框架有着深刻的理解,因此能够更好地将它们融合在一起,而不仅仅是简单的拼接。例如,Seam...

    jboss-seam2.0文档

    JBoss Seam 是一个开源的企业级开发框架,它旨在简化Java EE应用的开发过程,特别是在Web和富互联网应用程序(Rich Internet Applications, RIA)领域。Seam 2.0是其重要的版本,提供了许多增强的功能和改进,为...

    jboss教程及深入浅出JBoss+Seam

    【JBoss教程及深入浅出JBoss+Seam】是一个针对企业级Java应用服务器JBoss的深度学习资源,其中包含了两个主要部分:JBoss教程和对JBoss与Seam框架结合使用的详细介绍。这两个主题都是Java开发人员在部署和管理企业...

    Practical JBoss Seam Projects

    JBoss Seam是JBoss公司推出的一个开源框架,它构建在JSF和EJB3之上,为开发者提供了一个情境化应用开发的环境。Seam框架简化了企业级应用的开发过程,通过引入情境、事件和转换等概念,使得复杂业务逻辑的处理变得...

    JBoss Seam--A Deep Integration Framework

    JBoss Seam是一款开源的企业级应用框架,它以其深度集成的能力而闻名。这个框架的设计目标是简化Java EE(现在称为Jakarta EE)开发,通过提供一个统一的环境来整合各种技术和组件,如JavaServer Faces (JSF)、Java ...

    jboss-seam2.0文档.rar

    JBoss Seam 2.0 是一个全面的企业级Java开发框架,旨在简化Java EE(现在称为Java EE)应用程序的构建过程,尤其是在集成各种技术和处理业务逻辑方面。Seam 提供了一个统一的模型,允许开发者用一种更直观的方式来...

    Jboss_seam 中英文文档

    JBoss Seam 是一个开源的Java框架,它旨在简化企业级Java应用程序的开发。Seam 提供了一种整合的开发环境,融合了JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.1、Contexts ...

    java+架构系列培训课程_JBOSS_SEAM开发

    SEAM还深度集成了JSF,通过Facelets提供了更强大的模板引擎和页面构建机制。 #### 基于Facelets的JSF Facelets作为JSF的视图层技术,极大地简化了页面的构建和布局。以下是一个使用Facelets创建JSF应用的基本步骤...

    seam框架相关知识总结

    Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...

    Seam 资源

    在Java开发领域,JBoss Seam是一个极具影响力的技术框架,它为开发者提供了简化企业级应用开发的强大工具。"Seam 简洁与力量超越Java EE"这个主题,揭示了Seam如何在Java Enterprise Edition(Java EE)的基础上提供...

    seam介绍

    Seam不仅仅是一个集成框架,它还提供了自己的状态管理机制,通过注解和EL表达式实现与其他框架的深度整合。Seam对ORM(对象关系映射)的支持尤为突出,尤其是在处理持久化上下文的生命周期中,避免了ORM常见的问题,...

    j-seam2.zip

    JBoss Seam 2 是一个全面的、集成的开发框架,主要用于构建企业级Java应用程序。它在Java EE 5平台上运行,旨在简化开发过程,提高开发效率。Seam的核心理念是将各种技术如JavaServer Faces (JSF)、Enterprise ...

    Seam In Action翻译版

    Seam是由JBoss公司开发的一个集成框架,旨在简化Java EE(Java Platform, Enterprise Edition)应用的开发,尤其是在处理会话管理和组件集成方面。这本书的翻译版为中国开发者提供了一种深入理解和掌握Seam技术的...

    深入浅出JBoss_2BSeam

    而Seam则是一个轻量级、集成的Java EE框架,它简化了开发过程,特别是在处理富互联网应用程序(Rich Internet Applications, RIA)时。 首先,我们要理解JBoss的核心特性。JBoss支持EJB(Enterprise JavaBeans)、...

    Seam in Action

    Seam框架在Java EE平台的基础上构建,它通过集成JSF(JavaServer Faces)、EJB(Enterprise JavaBeans)、JPA(Java Persistence API)和CDI(Contexts and Dependency Injection)等技术,为开发者提供了一个统一的...

Global site tag (gtag.js) - Google Analytics