- 浏览: 77414 次
- 性别:
- 来自: 重庆
最新评论
-
禀圣含华:
怎么弄空格呢?___________然后我固定这些空格,怎么弄 ...
第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 1393第31章. Seam内建组件 本章描述Seam内建组件 ... -
第30章. Seam注释
2009-05-26 20:21 1504第30章. Seam注释 在你编写一个Seam应用程 ... -
第31章. Seam内建组件
2009-05-26 20:21 1340第31章. Seam内建组件 本章描述Seam内建组件 ... -
第29章. 配置Seam和打包Seam应用程序
2009-05-26 20:19 1481第29章. 配置Seam和打包Seam应用程序 配置 ... -
第28章. Hibernate搜索
2009-05-26 20:17 149028.1. 介绍 如Apache Lucen ... -
第27章. Spring框架集成
2009-05-26 20:16 1332第27章. Spring框架集成 Spring集成 ... -
第25章. 远程
2009-05-26 20:15 1217第25章. 远程 Seam 提供了一个从网页远程访 ... -
第24章. Web服务
2009-05-26 20:15 1587第24章. Web服务 Seam 集成了JBossWS, ... -
第23章. 缓存
2009-05-26 20:14 1351第23章. 缓存 在 ... -
第22章. 异步和消息
2009-05-26 20:12 2061第22章. 异步和消息 Seam 使异步执行来自网页请 ... -
第21章. Email
2009-05-26 20:11 1266现在Seam包含一个用于模板和发送邮件的可选组件。 Emai ... -
第 20章. RSS支持
2009-05-26 20:10 786第 20章. RSS支持 20.1. 安装 20.2. ... -
第19章. 微软的Excel 电子表格应用程序支持
2009-05-26 20:07 1786第19章. 微软的Excel 电子表格应用程序支持 S ... -
第18章. iText PDF 生成
2009-05-26 20:01 6387第18章. iText PDF 生成 18.1. 使用PDF ... -
第17章. Seam文本
2009-05-26 19:59 998第17章. Seam文本 面向协作站点需要一种更有友好的 ... -
第16章. 国际化、本地化和主题
2009-05-26 19:57 1336第16章. 国际化、本地化和主题 Seam使构建国际化应用程 ... -
第15章 安全(2)
2009-05-26 19:56 896第15章 安全(2) 15.5. 错误消息 安全 ... -
第15章 安全(1)
2009-05-26 19:53 94015.1. 概述 Seam安全API为你基于Seam的 ... -
第14章 Seam 和 JBoss 规则
2009-05-26 19:50 1374第14章 Seam 和 JBoss 规则 Seam使从 ... -
第13章 Seam 应用程序框架
2009-05-26 19:49 1354第13章 Seam 应用程序框架 Seam真正地使通过 ...
相关推荐
Practical.JBoss.Seam.Projects.pdf
JBOSS.SEAM.WEB应用开发 中文版 (美)MichaelYuan.
1.4. Seam 和jBPM:待办事项列表(todo list)示例..................................................................................................... 32 1.4.1. 理解代码....................................
Apress.Beginning.JBoss.Seam.Feb.2007.rar
Apress.Beginning.JBoss.Seam.Feb.2007.pdf 自己备份用的
Beginning.JBoss.Seam.很好的东西,只有英文版
Manning.Seam.in.Action.Sep.2008.pdf
jboss.seam.simplicity.and.power.beyond.java.ee2007
seam框架需要的所有jar包,支持seam ui组件
jboss seam 的英文书籍
此教程从基础讲述了使用Seam的开发过程,是一本很好的入门英文教程,英文内容也比较简单
seam开发资料:Seam is a fully featured application framework on top of Java EE 5. It is also one of the most popular enterprise Java framework today. Seam deeply integrates many other standard-based ...
Part 1 - Teeing off with Seam 1 Seam unifies Java EE 2 Putting seam-gen to work Part 2 – Seam fundamentals 3 The Seam life cycle 4 Components and contexts 5 The Seam component descriptor 6 Absolute ...
seam ejb jsf 搞了个小例子 自己留作资料备份
本文描述了seam+eclipse+jboss的下载地址配置过程等
Seam 2.X Web Development
2007年Shai Avidan 和Ariel Shamir论文《Seam Carving for Content-Aware Image Resizing》所提出方法的Matlab代码实现和作者的论文。 效果非常炫,而且代码不长
#Generated by seam setup #Mon Jun 08 21:07:28 CST 2009 #数据库密码 hibernate.connection.password=testSeamGen #工作目录 workspace.home=E\:/workspace_seam #实体存放路径 model.package=...
seam中的注解总结,包括三种JPA和seam自身的标签
最新的SEAM 书籍,基于seam2.0,全的,625页. Manning.Seam.in.Action.Sep.2008.pdf