`
alienj
  • 浏览: 78782 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

第26章. Seam和Google网页工具

阅读更多
第26章. Seam和Google网页工具 对那些喜欢使用Google Web Toolkit (GWT) 开发动态AJAX 应用程序的人而言, Seam 提供了一个集成层,允许GWT窗口小部件直接与Seam组件交互。 对使用GWT,我们假定你已经熟悉了GWT工具—— 大部分信息可以在http://code.google.com/webtoolkit/找到。本节不打算解释GWT如何工作或使用。 26.1. 配置 在Seam应用程序中使用GWT工具不需要特殊配置,然而必然安装Seam资源servlet。详情见29章“配置Seam和打包Seam应用程序。 26.2. 准备你的组件 准备通过GWT调用Seam组件的第一步,是为你希望调用的方法创建同步和异步服务接口。这两个接口应该继承GWT接口 com.google.gwt.user.client.rpc.RemoteService: public interface MyService extends RemoteService { public String askIt(String question); } 异步接口应该是相同的,只是它声明的每个方法中包含另外一个AsyncCallback 参数: public interface MyServiceAsync extends RemoteService { public void askIt(String question, AsyncCallback callback); } 异步接口,在本例 MyServiceAsync中,会被GWT实现,并且绝不应该直接实现。 下一步,是创建一个实现了同步接口的Seam组件: @Name("org.jboss.seam.example.remoting.gwt.client.MyService") public class ServiceImpl implements MyService { @WebRemote public String askIt(String question) { if (!validate(question)) { throw new IllegalStateException("Hey, this shouldn't happen, I checked on the client, "+"but its always good to double check."); } return "42. Its the real question that you seek now."; } public boolean validate(String q) { ValidationUtility util = new ValidationUtility(); return util.isValid(q); } } Seam组件名必须与GWT客户端接口的全限定名相匹配(如上面显示的),否则当一个客户端产生一个GWT调用时,Seam资源servlet将不能找到它。通过GWT可以访问的方法也必须用@WebRemote进行注释。 26.3. 连接GWT窗口小部件到Seam组件 下一步,是编写返回同步接口给组件的一个方法。这个方法可以被放在widget 类的内部,并且widget用它来获取同步客户端存根的一个引用: private MyServiceAsync getService() { String endpointURL = GWT.getModuleBaseURL() + "seam/resource/gwt"; MyServiceAsync svc = (MyServiceAsync) GWT.create(MyService.class); ((ServiceDefTarget) svc).setServiceEntryPoint(endpointURL); return svc; } 最后一步是编写widget代码,调用在客户端存根上的方法。 下面例子创建了一个简单的用户界面,带有一个标签、一个文本输入框和一个按钮: public class AskQuestionWidget extends Composite { private AbsolutePanel panel = new AbsolutePanel(); public AskQuestionWidget() { Label lbl = new Label("OK, what do you want to know?"); panel.add(lbl); final TextBox box = new TextBox(); box.setText("What is the meaning of life?"); panel.add(box); Button ok = new Button("Ask"); ok.addClickListener(new ClickListener() { public void onClick(Widget w) { ValidationUtility valid = new ValidationUtility(); if (!valid.isValid(box.getText())) { Window.alert("A question has to end with a '?'"); } else { askServer(box.getText()); } } }); panel.add(ok); initWidget(panel); } private void askServer(String text) { getService().askIt(text, new AsyncCallback() { public void onFailure(Throwable t) { Window.alert(t.getMessage()); } public void onSuccess(Object data) { Window.alert((String) data); } }); } ... 当点击按钮时,用文本输入框的内容为参数调用askServer()方法(在本例中,也执行校验,确保输入的是一个有效的问题)。askServer()方法获得异步客户端存根的一个引用(用getService()方法返回),并调用askIt() 方法。结果(或错误消息,如果调用失败)显示在一个警报窗口中 这个例子的所有代码可以在Seam发行版的examples/remoting/gwt目录中找到。 26.4. GWT Ant目标 对GWT应用程序的部署,有一个编译到Javascript(compile-to-Javascript)的步骤(它压缩和“混淆”代码)。有一个ant实用程序,它可以被用来代替GWT提供的命令行和GUI实用程序。为使用它,你将需要在你的ant类路径内有ant任务jar包和下载的GWT(反正,本地模式你需要它们)。 然后,在你的ant文件,设置 (在你的Ant文件顶部附近): <taskdef uri="antlib:de.samaflost.gwttasks" resource="de/samaflost/gwttasks/antlib.xml" classpath="./lib/gwttasks.jar"></taskdef><property file="build.properties"></property> 创建 build.properties 文件,它有这样的内容: gwt.home=/gwt_home_dir 它当然指向安装了GWT的目录。然后使用它,创建一个target: <target name="gwt-compile"><delete><fileset dir="view"></fileset></delete><compile outdir="build/gwt" gwthome="${gwt.home}" classbase="${gwt.module.name}" sourceclasspath="src"></compile><copy todir="view"><fileset dir="build/gwt/${gwt.module.name}"></fileset></copy></target> 在调用这个target时,将编译GWT应用程序,并且拷贝它到指定的目录(它会在你的war的webapp部分中——记住GWT产生HTML和Javascript制品)。你绝不要编辑gwt-compile产生的结果代码——你终始应在GWT源目录中编辑。 记住GWT配备了一个本地模式浏览器—— 如果你用GWT进行开发,你应用使用它。如果你没有用本地模式浏览器,而只是每次编译它,你就没有利用最有效的工具包 (实际上,如果你不能或不愿使用本地模式浏览器,我认为你一点也没有利用GWT——它真得很有用!).
分享到:
评论

相关推荐

    Practical.JBoss.Seam.Projects

    Practical.JBoss.Seam.Projects.pdf

    JBOSS.SEAM.WEB应用开发

    JBOSS.SEAM.WEB应用开发 中文版 (美)MichaelYuan.

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.4. Seam 和jBPM:待办事项列表(todo list)示例..................................................................................................... 32 1.4.1. 理解代码....................................

    Apress.Beginning.JBoss.Seam.Feb.2007

    9. **Seam测试与调试**:介绍Seam提供的测试工具和方法,如单元测试和集成测试,以及如何有效地调试Seam应用。 10. **实战项目**:书中可能通过一个或多个实际项目案例,让读者能够将所学知识应用于实际开发中,...

    Manning.Seam.in.Action.Sep.2008.pdf

    此外,Seam还内置了一系列UI组件和工具,帮助开发者快速构建美观且功能丰富的用户界面。 ### 结论 《Seam in Action》不仅是一本技术指南,也是Seam框架的学习宝典。通过对Seam框架的全面介绍,本书帮助读者深入...

    seam需要的jar包

    这些组件通常以`.jar`文件形式存在,例如`seam-components.jar`,包含了各种UI相关的组件和工具。 还有可能包含`seam-core.jar`,这是Seam框架的基础模块,提供了核心功能,如事件处理、安全性、会话管理和事务管理...

    jboss.seam.simplicity.and.power.beyond.java.ee2007

    jboss.seam.simplicity.and.power.beyond.java.ee2007

    Packt.Publishing.Seam.2.x.Web.Development.Apr.2009

    2. **易于使用**:Seam 通过提供高级组件和工具来简化常见的开发任务,例如表单处理、文件上传等。 3. **灵活性**:开发者可以根据项目需求选择使用 Seams 的全部功能或仅使用其中的一部分。 4. **社区支持**:拥有...

    Apress.Beginning.JBoss.Seam.Feb.2007.pdf

    ### 关于《Apress.Beginning.JBoss.Seam.Feb.2007.pdf》的知识点总结 #### 一、书籍基本信息概述 - **书名**:《Beginning JBoss Seam: From Novice to Professional》 - **作者**:Joseph Faisal Nusairat - **...

    Beginning.JBoss.Seam.Feb.2007

    该书是关于JBoss Seam的入门级指南,适合那些想要学习并掌握这一强大工具的新手和有一定经验的开发者。 #### 二、JBoss Seam概述 JBoss Seam是一个基于Java EE平台的应用框架,它通过简化企业级应用程序开发过程来...

    JBoss.Seam.Simplicity.and.Power.Beyond.Java.EE

    - **JBoss Seam** 是一个基于Java EE平台的开源框架,它提供了简化企业级应用开发的一系列工具和技术。该框架的目标是降低开发复杂性并提高生产力。 - **标题中的“Simplicity and Power Beyond Java EE”** 暗示了...

    seam插件下载地址及安装过程

    Ant 是一个用于自动化构建、测试和部署 Java 应用的工具。下载 Apache Ant 并解压,设置 ANT_HOME 环境变量,并在 Path 变量中加入 bin 目录。这样,你就可以在任何目录下运行 Ant 命令。 Seam 包的下载和配置是...

    eclipse 工程的 Seam 例子

    Seam、EJB和JSF是Java开发中的三个重要框架,它们在企业级应用程序开发中发挥着关键作用。本文将详细讲解如何在Eclipse环境中创建并理解一个Seam工程的实例,结合EJB(Enterprise JavaBeans)和JSF(JavaServer ...

    jboss seam 学习资料,seam in action和官方手册

    7. **测试与调试**:掌握Seam的测试工具和策略,确保代码质量。 8. **Seam组件**:了解如Conversation、Transactions、邮件服务等Seam内置组件的使用方法。 9. **实时性与Ajax**:探索Seam如何实现实时更新和Ajax...

    使用 Maven 管理 Seam 项目

    在IT行业中,构建和管理Java项目是一项至关重要的任务,而Maven作为一个强大的项目管理和依赖管理工具,极大地简化了这一过程。本篇文章将深入探讨如何使用Maven来管理Seam项目,一个基于Java EE的轻量级框架,专为...

    Seam2.XWebDevelopment.pdf 英文原版

    Seam 2.X Web Development

    为Seam做好准备

    8. **Seam工具**:Seam提供了一些工具,如Seam Gen,可以帮助快速生成项目结构和基础代码,学习如何使用这些工具能加速开发进程。 9. **Seam事件和上下文**:Seam引入了一种独特的事件模型和组件上下文,使得组件间...

    Seam Carving for Content-Aware Image Resizing(基于内容缩放图片的方法)

    2007年Shai Avidan 和Ariel Shamir论文《Seam Carving for Content-Aware Image Resizing》所提出方法的Matlab代码实现和作者的论文。 效果非常炫,而且代码不长

    深入浅出JBoss Seam.pdf

    Seam还提供了一套增强JSF的工具,包括JSF组件标签和注解,这些工具增强了JSF的“Web友好性”和网页效率。例如,Seam解决了JSF中常见的问题,即对HTTP POST的过度依赖,这让通过HTTP GET访问JSF页面变得非常困难。...

    Configuring Seam and packaging Seam applications

    Seam 是一个强大的Java开发框架,专为JavaServer Faces (JSF) 和企业级Java (Java EE) 应用程序设计。它简化了组件集成、事务管理、安全性和其他复杂功能,使开发者能够更高效地构建应用程序。以下是对配置Seam和...

Global site tag (gtag.js) - Google Analytics