原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF
翻译:icess http://blog.matrix.org.cn/page/icess 讨论
使用更多的动态文本
在我们应用程序的第一个版本中,我们硬编码标签字符到程序中.在下一个版本中,我们将保持该文本与java代码分离.
GWT Parameters in Hosted Mode
一种方式是使用GWT来定义label 和message.
13. 打开demo.gwt.client.HelloWidgetEntryPoint.java 文件用下面的代码替换createWidget 方法.
protected Widget createWidget(final String id) {
Map m = getWidgetParams(id);
final String buttonLabel = (String) m.get("buttonLabel");
final String greeting = (String) m.get("greeting");
Button btn = new Button(buttonLabel, new ClickListener() {
public void onClick(Widget sender) {
Window.alert(greeting);
}
});
return btn;
}
14. 保存文件.
15. 打开 JavaSource\demo\gwt\public\index.html 文件.
该文件已经包含了一个如何定义参数的示例,我们只需要修改一下就可以了. :
16. 修改为如下的代码:
<html>
<head>
<meta name="gwt:module" content="demo.gwt.HelloWidget">
<meta name="gwt:property" content="viewid=hello">
<meta name="gwt:property" content="action=/gwtFacesServlet">
<title>gwt-jsf integration</title>
</head>
<body bgcolor="white">
<script language="javascript" src="gwt.js"></script>
<iframe id="__gwt_historyFrame"
style="width:0;height:0;border:0"></iframe>
<span id="_id1" class="demo.gwt.HelloWidget">
<span id="_id1:_data" style="display:none;">
<span title="buttonLabel">Say Hello</span>
<span title="greeting">Hello GWT!</span>
</span>
<input type="hidden" id="javax.faces.ViewState"
name="javax.faces.ViewState" value="_id0:_id0" />
</span>
</body>
</html>
17. 在 Hosted Mode 中启动ant:
ant shell
你现在可以看到文本定义在 public/index.html 文件中:
然而,如果你想创建一个war文件,然后部署它.你将看不到相同的结果.这是因为 public/index.html仅仅在Hosted Mode中其作用.在 Run-Time Mode,我们需要使用 JSF page.
Using JSF Expression Language (EL) in Run-Time Mode
看一下WebContent\pages\Base.xhtml文件.它包含如下代码:
<widget:component id="main" />
这实际上是一个GWT widget 的 JSF 包装.
18. 定义组件的"buttonLabel" 和"greeting" 参数 :
<widget:component id="main" buttonLabel ="Click Me!"
greeting="Hello, GWT and JSF"/>
19. 在Run-Time Mode中运行该项目.
看看结果. 然而这是不是太简单了, 下面来看看如何使用 JSF EL来使它更动态一些.
20.现在关闭XHTML 文件.
Adding a Resource File
21. 在JavaSource 文件夹下创建demo/gwt/app/bundle/Labels.properties文件,包含下面的内容:
#
buttonLabel=Say Hello!
Adding a Managed Bean
22. 在JavaSource中创建一个类demo.gwt.app.GreetingBean .使用下面的代码:
package demo.gwt.app;
public class GreetingBean {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
23. 在WEB-INF/faces-context.xml 中注册该bean.
The faces-context.xml should contain
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.
//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<managed-bean>
<managed-bean-name>greetingBean</managed-bean-name>
<managed-bean-class>demo.gwt.app.GreetingBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>name</property-name>
<property-class>java.lang.String</property-class>
<value>GWT and JSF</value>
</managed-property>
</managed-bean>
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
</faces-config>
Finishing Up
要让EL工作.我们要在组件类中添加属性到属性map中.
24. 打开demo.gwt.jsf.UIHelloWidget, 找到 getWidgetParameters() 方法,使用下面的代码替换.
public Map getWidgetParameters() {
HashMap params = new HashMap();
params.put("greeting",getAttributes().get("greeting"));
params.put("buttonLabel",getAttributes().get("buttonLabel"));
return params;
}
25. 添加下面的import语句:
import java.util.HashMap;
现在回到 pages/Base.xhtml文件中.
26. 把资源声明放到该文件的顶部:
<f:loadBundle basename="demo.gwt.app.bundle.Labels" var="bundle"/>
27. 修改widget:component的属性:
<widget:component id="main" buttonLabel ="#{bundle.buttonLabel}"
greeting="Hello #{greetingBean.name}!" />
现在两个属性都通过el来产生了,一个来自于 bundle resource file, 一个来自于 backing bean.
如果你创建,部署,启动该程序,你可以看到该程序现在使用的按钮标签了:
OK,我们已经在JSF环境中参数化了GWT widget的数据. 因此你可以使用同样的方法用数据初始化该 widget .然而目前这一切看起来想一张单程车票( one-way ticket).我们还没有提到一个非常重要的方面 .
分享到:
相关推荐
GWT和JSF之间看起来是相互竞争的技术,而使用G4JSF则看起来是很自然的互补技术.而G4JSF的任务就是使这种互补关系的技术看起来更自然一些
2007年图书:JSP_JSF_Tomcat Web编程从入门到精通
JSF和Spring集成的资料比较少,原理是获得彼此的上下文引用,以此进一步获得各自管理的bean,这是可能的,因为两者是web应用框架都遵循servlet规范,为二者整合提供了可能和基础.
JSF集成Spring_Framework和Hibernate开发应用实例
JSF入门详细资料(PDF),包括JSF入门中文版,JSF Web应用实战开发,以及JSF2,JSF入门必配学习资料
JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等...
JSF和Spring集成
在支持JSF的RAD开发工具中,人们可以像使用Visual Studio.NET一样方便快捷地构建Web用户界面,大大降低了利用Java技术实现Web用户界面的难度,提高了开发效率。设计每个需要的JSP页面,在页面中放置JSF的内置组件,...
VisualWebJSF架构使用教程,VisualWebJSF架构使用教程,VisualWebJSF架构使用教程
JSF是一种用于构建Java ... 包含JSP页面的JSF应用程序也使用由为了表现UI组件和在页面上的其他对象的JSF技术而定义的标准的tag库。 Java Server Faces技术的重要开发框架 sun-ri、myfaces、icefaces、richfaces、seam
Apress - Beginning Jsp Jsf And Tomcat Web Development From Novice To Professional (2007).pdf
基于JSF架构的WEB应用开发研究 基于JSF架构的WEB应用开发研究 基于JSF架构的WEB应用开发研究
JSF2和RICHFASES4使用指南,JSF(Java Server Faces)是JCP标准化组织通过的Web应用开发标准框架,RichFaces是RedHat公司的JBoss社区开发的一套基于JSF的UI组件库,支持异步请求功能
JSF Web 应用开发实战源码,很基础很全的各种书中实例,适合初学者!
JSF2和RICHFACES4使用指南
JSF集成Spring、Hibernate jar包完整版 tomcat6或其他web服务器下部署运行。 (tomcat5 启动报错) 连接sqlserver 数据库。
jsf与润乾集成使用
Ajax4jsf 用户指南 目录 1. 介绍 2. 开始使用 Ajax4jsf ...Ajax4jsf ...Web.xml ...Ajax4jsf 框架的基本概念 ...如何做......4. Ajax4JSF ...5. Ajax4jsf内建的换肤功能 ...9. Exadel VCP 和 Ajax4jsf 10. Web上的资源
基于JSF与Hibernate的Web应用,郭宏杰,张亚芳,JSF(Java Server Faces) 是为基于Java的Web 应用提供的一种用户界面开发框架,作为新一代的Web应用框架,能使用户从复杂的界面开发中解脱出��
JSF编程中,所用到的所有JAR包,下载后,放在网站目录的lib文件夹下即可。