使用g4jsf集成 google web toolkit 和 jsf,在我们应用程序的第一个版本中,我们硬编码标签字符到程序中.在下一个版本中,我们将保持该文本与java代码分离.
使用更多的动态文本
在我们应用程序的第一个版本中,我们硬编码标签字符到程序中.在下一个版本中,我们将保持该文本与java代码分离.
gwt parameters in hosted mode
一种方式是使用gwt来定义label 和message.
13. 打开demo.gwt.client.hellowidgetentrypoint.java 文件用下面的代码替换createwidget 方法.
protected widget createwidget(final string id) { button btn = new button(buttonlabel, new clicklistener() { return btn; |
14. 保存文件.
15. 打开 javasource\demo\gwt\public\index.html 文件.
该文件已经包含了一个如何定义参数的示例,我们只需要修改一下就可以了. :
16. 修改为如下的代码:
<html> <span id="_id1" class="demo.gwt.hellowidget"> </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文件.它包含如下代码:
<widget:component id="main" /> |
这实际上是一个gwt widget 的 jsf 包装.
18. 定义组件的"buttonlabel" 和"greeting" 参数 :
19. 在run-time mode中运行该项目. 看看结果. 然而这是不是太简单了, 下面来看看如何使用 jsf el来使它更动态一些. 20.现在关闭xhtml 文件. adding a resource file 21. 在javasource 文件夹下创建demo/gwt/app/bundle/labels.properties文件,包含下面的内容:
<widget:component id="main" buttonlabel ="click me!"
greeting="hello, gwt and jsf"/>
#
buttonlabel=say hello!
adding a managed bean
22. 在javasource中创建一个类demo.gwt.app.greetingbean .使用下面的代码:
package demo.gwt.app; public class greetingbean { public string getname() { public void setname(string name) { |
23. 在web-inf/faces-context.xml 中注册该bean.
the faces-context.xml should contain : <?xml version="1.0" encoding="utf-8"?> <managed-bean>
|
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的属性:
现在两个属性都通过el来产生了,一个来自于 bundle resource file, 一个来自于 backing bean. 如果你创建,部署,启动该程序,你可以看到该程序现在使用的按钮标签了: ok,我们已经在jsf环境中参数化了gwt widget的数据. 因此你可以使用同样的方法用数据初始化该 widget .然而目前这一切看起来想一张单程车票( one-way ticket).我们还没有提到一个非常重要的方面 .
<widget:component id="main" buttonlabel ="#{bundle.buttonlabel}"
greeting="hello #{greetingbean.name}!" />