站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题使用G4JSF集成 Google Web Toolkit 和 JSF(2)

使用G4JSF集成 Google Web Toolkit 和 JSF(2)

摘要: 使用G4JSF集成 Google Web Toolkit 和 JSF,在我们应用程序的第一个版本中,我们硬编码标签字符到程序中.在下一个版本中,我们将保持该文本与java代码分离.

原文:http://www.theserverside.com/tt/articles/article.tss?l=GWTandJSF

翻译:icess http://blog.matrix.org.cn/page/icess

使用G4JSF集成 Google Web Toolkit 和 JSF(1) : http://www.matrix.org.cn/resource/article/2006-09-11/G4JSF_e8465f7e-4195-11db-819e-43970e7c5245.html

使用更多的动态文本

在我们应用程序的第一个版本中,我们硬编码标签字符到程序中.在下一个版本中,我们将保持该文本与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. 修改为如下的代码:


<head>



gwt-jsf integration
</head>
<body bgcolor="white">
<script language="javascript" src="gwt.js"></script>
<iframe id="__gwt_historyFrame"
</iframe>



<input type="hidden" id="javax.faces.ViewState"



</body>

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文件.它包含如下代码:

这实际上是一个GWT widget 的 JSF 包装.

18. 定义组件的"buttonLabel" 和"greeting" 参数 :

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"?>
faces-config PUBLIC "-//Sun Microsystems, Inc.
//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">



greetingBean
demo.gwt.app.GreetingBean
session

name
java.lang.String
GWT and JSF





com.sun.facelets.FaceletViewHandler


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. 把资源声明放到该文件的顶部:

27. 修改widget:component的属性:

greeting="Hello #{greetingBean.name}!" />

现在两个属性都通过el来产生了,一个来自于 bundle resource file, 一个来自于 backing bean.

如果你创建,部署,启动该程序,你可以看到该程序现在使用的按钮标签了:

OK,我们已经在JSF环境中参数化了GWT widget的数据. 因此你可以使用同样的方法用数据初始化该 widget .然而目前这一切看起来想一张单程车票( one-way ticket).我们还没有提到一个非常重要的方面 .


↑返回目录
前一篇: XFire:轻松简单地开发Web Services
后一篇: 使用G4JSF集成Google Web Toolkit 和JSF(1)