- 浏览: 82257 次
- 性别:
- 来自: 重庆
-
最新评论
-
禀圣含华:
怎么弄空格呢?___________然后我固定这些空格,怎么弄 ...
第18章. iText PDF 生成 -
super0555:
managed
第13章 Seam 应用程序框架 -
Javakeith:
代码呢?共享下代码呗!
第18章. iText PDF 生成 -
tonyshen277:
同感啊。还在做Win32下的开发,楼主所说的一个都不能少啊。
转自baidu wqqq 给软件开发初学者 -
kdboy:
的确,把人放在宇宙中去看,从上帝的眼中去看,人的确是非常渺小, ...
人生是什么
第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——它真得很有用!).
发表评论
-
第31章. Seam内建组件
2009-05-28 11:51 1510第31章. Seam内建组件 本章描述Seam内建组件 ... -
第30章. Seam注释
2009-05-26 20:21 1644第30章. Seam注释 在你编写一个Seam应用程 ... -
第31章. Seam内建组件
2009-05-26 20:21 1496第31章. Seam内建组件 本章描述Seam内建组件 ... -
第29章. 配置Seam和打包Seam应用程序
2009-05-26 20:19 1589第29章. 配置Seam和打包Seam应用程序 配置 ... -
第28章. Hibernate搜索
2009-05-26 20:17 154728.1. 介绍 如Apache Lucen ... -
第27章. Spring框架集成
2009-05-26 20:16 1456第27章. Spring框架集成 Spring集成 ... -
第25章. 远程
2009-05-26 20:15 1336第25章. 远程 Seam 提供了一个从网页远程访 ... -
第24章. Web服务
2009-05-26 20:15 1729第24章. Web服务 Seam 集成了JBossWS, ... -
第23章. 缓存
2009-05-26 20:14 1475第23章. 缓存 在 ... -
第22章. 异步和消息
2009-05-26 20:12 2177第22章. 异步和消息 Seam 使异步执行来自网页请 ... -
第21章. Email
2009-05-26 20:11 1385现在Seam包含一个用于模板和发送邮件的可选组件。 Emai ... -
第 20章. RSS支持
2009-05-26 20:10 840第 20章. RSS支持 20.1. 安装 20.2. ... -
第19章. 微软的Excel 电子表格应用程序支持
2009-05-26 20:07 1864第19章. 微软的Excel 电子表格应用程序支持 S ... -
第18章. iText PDF 生成
2009-05-26 20:01 6551第18章. iText PDF 生成 18.1. 使用PDF ... -
第17章. Seam文本
2009-05-26 19:59 1045第17章. Seam文本 面向协作站点需要一种更有友好的 ... -
第16章. 国际化、本地化和主题
2009-05-26 19:57 1447第16章. 国际化、本地化和主题 Seam使构建国际化应用程 ... -
第15章 安全(2)
2009-05-26 19:56 947第15章 安全(2) 15.5. 错误消息 安全 ... -
第15章 安全(1)
2009-05-26 19:53 103115.1. 概述 Seam安全API为你基于Seam的 ... -
第14章 Seam 和 JBoss 规则
2009-05-26 19:50 1471第14章 Seam 和 JBoss 规则 Seam使从 ... -
第13章 Seam 应用程序框架
2009-05-26 19:49 1462第13章 Seam 应用程序框架 Seam真正地使通过 ...
相关推荐
Practical.JBoss.Seam.Projects.pdf
JBOSS.SEAM.WEB应用开发 中文版 (美)MichaelYuan.
1.4. Seam 和jBPM:待办事项列表(todo list)示例..................................................................................................... 32 1.4.1. 理解代码....................................
9. **Seam测试与调试**:介绍Seam提供的测试工具和方法,如单元测试和集成测试,以及如何有效地调试Seam应用。 10. **实战项目**:书中可能通过一个或多个实际项目案例,让读者能够将所学知识应用于实际开发中,...
此外,Seam还内置了一系列UI组件和工具,帮助开发者快速构建美观且功能丰富的用户界面。 ### 结论 《Seam in Action》不仅是一本技术指南,也是Seam框架的学习宝典。通过对Seam框架的全面介绍,本书帮助读者深入...
jboss.seam.simplicity.and.power.beyond.java.ee2007
2. **易于使用**:Seam 通过提供高级组件和工具来简化常见的开发任务,例如表单处理、文件上传等。 3. **灵活性**:开发者可以根据项目需求选择使用 Seams 的全部功能或仅使用其中的一部分。 4. **社区支持**:拥有...
### 关于《Apress.Beginning.JBoss.Seam.Feb.2007.pdf》的知识点总结 #### 一、书籍基本信息概述 - **书名**:《Beginning JBoss Seam: From Novice to Professional》 - **作者**:Joseph Faisal Nusairat - **...
该书是关于JBoss Seam的入门级指南,适合那些想要学习并掌握这一强大工具的新手和有一定经验的开发者。 #### 二、JBoss Seam概述 JBoss Seam是一个基于Java EE平台的应用框架,它通过简化企业级应用程序开发过程来...
- **JBoss Seam** 是一个基于Java EE平台的开源框架,它提供了简化企业级应用开发的一系列工具和技术。该框架的目标是降低开发复杂性并提高生产力。 - **标题中的“Simplicity and Power Beyond Java EE”** 暗示了...
Ant 是一个用于自动化构建、测试和部署 Java 应用的工具。下载 Apache Ant 并解压,设置 ANT_HOME 环境变量,并在 Path 变量中加入 bin 目录。这样,你就可以在任何目录下运行 Ant 命令。 Seam 包的下载和配置是...
Seam、EJB和JSF是Java开发中的三个重要框架,它们在企业级应用程序开发中发挥着关键作用。本文将详细讲解如何在Eclipse环境中创建并理解一个Seam工程的实例,结合EJB(Enterprise JavaBeans)和JSF(JavaServer ...
7. **测试与调试**:掌握Seam的测试工具和策略,确保代码质量。 8. **Seam组件**:了解如Conversation、Transactions、邮件服务等Seam内置组件的使用方法。 9. **实时性与Ajax**:探索Seam如何实现实时更新和Ajax...
在IT行业中,构建和管理Java项目是一项至关重要的任务,而Maven作为一个强大的项目管理和依赖管理工具,极大地简化了这一过程。本篇文章将深入探讨如何使用Maven来管理Seam项目,一个基于Java EE的轻量级框架,专为...
Seam 是一个强大的Java开发框架,专为JavaServer Faces (JSF) 和企业级Java (Java EE) 应用程序设计。它简化了组件集成、事务管理、安全性和其他复杂功能,使开发者能够更高效地构建应用程序。以下是对配置Seam和...
Seam 2.X Web Development
8. **Seam工具**:Seam提供了一些工具,如Seam Gen,可以帮助快速生成项目结构和基础代码,学习如何使用这些工具能加速开发进程。 9. **Seam事件和上下文**:Seam引入了一种独特的事件模型和组件上下文,使得组件间...
2007年Shai Avidan 和Ariel Shamir论文《Seam Carving for Content-Aware Image Resizing》所提出方法的Matlab代码实现和作者的论文。 效果非常炫,而且代码不长
Seam还提供了一套增强JSF的工具,包括JSF组件标签和注解,这些工具增强了JSF的“Web友好性”和网页效率。例如,Seam解决了JSF中常见的问题,即对HTTP POST的过度依赖,这让通过HTTP GET访问JSF页面变得非常困难。...
##### 第二章:用Seam-gen快速起步 本章重点介绍了如何使用Seam-gen工具快速创建项目结构,为后续开发打下基础。 1. **准备工作**:包括安装必要的软件和配置开发环境。 2. **建立新的Eclipse项目**:通过Seam-gen...