`
withyou
  • 浏览: 453619 次
社区版块
存档分类
最新评论

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

阅读更多

原文: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).我们还没有提到一个非常重要的方面 .

  讨论

分享到:
评论

相关推荐

    使用G4JSF集成GWT和JSF

    G4JSF,全称为Google Web Toolkit for JavaServer Faces,是一个开源项目,旨在整合Google Web Toolkit(GWT)和JavaServer Faces(JSF)两种看似相互竞争的技术,实现它们的互补。GWT允许开发者使用Java编写前端...

    2007年图书:JSP_JSF_Tomcat Web编程从入门到精通

    《2007年图书:JSP_JSF_Tomcat Web编程从入门到精通》这本书主要涵盖了Java服务器页面(JSP)、JavaServer...通过阅读,你可以了解到如何结合使用JSP、JSF和Tomcat,创建功能丰富的Web应用程序,并提升自己的开发技能。

    JSF入门+JSF web实战+JSF2

    本系列资料包括《JSF入门》、《JSF Web应用实战开发》和《JSF2》,旨在帮助初学者快速掌握JSF的核心概念和技术。 《JSF入门简体中文版》是学习JSF的基础,它涵盖了JSF的基本架构、组件库、生命周期和事件处理等方面...

    JSF集成Spring_Framework和Hibernate开发应用实例

    通过集成JSF、Spring和Hibernate,JCatalog实现了Web应用的完整生命周期,包括用户界面的呈现、业务逻辑的处理和数据库操作。这种方式不仅提供了强大的功能,还有利于团队分工合作,使得开发者能够专注于各自领域的...

    JSF和Spring集成.doc

    **JSF (JavaServer Faces)** 和 **Spring** 都是目前广泛使用的Java Web开发框架。JSF 是一个用于构建基于 Java 的 Web 应用程序的标准组件框架,而 Spring 框架则是一个全面的轻量级应用程序框架,用于简化企业级...

    VisualWebJSF架构使用教程.rar

    这个“VisualWebJSF架构使用教程”压缩包文件包含了关于如何使用该框架的详细指导,旨在帮助初学者和有经验的开发者更好地理解和运用VisualWebJSF。 首先,我们要了解JSF是什么。JavaServer Faces(JSF)是Java平台...

    JSF编程WEB-INF下lib内所用到的jar包集成

    将这些JAR包放入`WEB-INF/lib`目录,意味着它们会自动被Web应用程序加载,供JSF框架和相关组件使用。确保这些库正确配置和更新,对于构建稳定、高效的JSF应用至关重要。开发者在进行JSF编程时,需要根据具体项目需求...

    jsf教程 JSF为JAVA的 Web应用用户界面

    JSF为JAVA的 Web应用用户界面的开发人员提供了标准的编程接口、丰富可扩展的UI组件库(一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作和一个标准的HTML 标记库来表示 UI组件)、事件驱动模型等...

    JSF Web 应用开发实战源码

    10. **集成其他框架**:JSF可以与Spring、Hibernate等其他流行框架无缝集成,实现更强大的功能,如依赖注入和持久化。 通过这个实战源码,你不仅可以学习到JSF的基本使用,还能了解到如何在实际项目中应用这些技术...

    struts2.0集成JSF插件

    集成Struts2.0和JSF,通常是为了结合Struts2的控制层优势和JSF的视图层优势。这可以通过使用Struts2的JSF插件实现。该插件允许Struts2的动作(Action)和JSF的 Managed Beans 结合,使得Action可以直接调用Managed ...

    详细的JSF的使用步骤

    JSF的核心理念是组件化,它提供了一个模型-视图-控制器(MVC)架构,允许开发者使用预定义的组件、事件处理和后台bean来构建功能丰富的Web应用程序,而无需深入理解HTTP请求/响应的底层细节。 1. **JSF框架概述** ...

    jsf与润乾集成使用

    ### JSF与润乾集成使用的深入探讨 #### 引言:JSF技术概览与优势 JSF(JavaServer Faces)作为Java平台上的一个标准组件框架,为开发者提供了构建动态网页应用程序的一整套解决方案。其核心特性在于简化了UI组件的...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    学习Ajax4JSF,你将掌握如何在JSF应用中集成Ajax,创建异步交互,以及使用其提供的各种Ajax组件,如`a4j:support`和`a4j:commandButton`。 5. **JSF项目的创建**:这部分教程会指导你从零开始创建一个完整的JSF项目...

    一种新的基于JSF技术的Web用户界面开发方法.pdf

    同时,结合现代前端技术如AngularJS、ReactJS等,JSF可以进一步提升Web应用的性能和交互效果,为用户提供更加流畅、直观的使用体验。 综上所述,JSF技术作为一种先进的Web用户界面开发方法,通过其独特的请求处理...

    JSF web jar包

    4. **EL (Expression Language)**:JSF通常与Java EE中的EL结合使用,用于在JSP或Facelets页面中表达和计算动态值。`javax.el.jar`包含了EL的实现。 5. **Servlet容器兼容性库**:例如,`javax.servlet.jar`和`...

    JSF框架入门教程和JSF的jar包

    2. **视图(View)**: 视图是用户看到和交互的部分,通常是由JSF组件组成的JSP或Facelets页面。 3. **模型(Model)**: 模型包含了业务逻辑和数据。JSF通过 Managed Beans 来处理模型对象,它们可以是普通的Java类...

    JSF集成Spring、Hibernate

    综上所述,这个项目涉及了使用JSF创建用户界面,通过Spring进行业务逻辑管理和依赖注入,利用Hibernate处理数据库操作,同时通过源代码学习如何将这些组件有效集成。为了运行项目,需要一个合适的Web服务器(如...

Global site tag (gtag.js) - Google Analytics