`
tendy
  • 浏览: 47775 次
  • 来自: ...
社区版块
存档分类
最新评论

把ExtJS的组件包装成 JSF 组件(1)

    博客分类:
  • java
阅读更多
java 代码

JSF 1.2 的开源实现好像还不多。MyFaces 刚出了 1.2.0 Core,扩展组件方面,Oracle ADF 捐了一些组件给 apache,名字叫 Trinidad,看了一下,好像还不错的样子,但风格不大合口味,需要修改。

金蝶也来凑热闹,把 ExtJS 包装了一下,做成 JSF 组件,就叫 OperaMasks。稳定性不知如何,前段时间玩了下它的在线demo,没多久就见它的 Apusic 服务器抛了个 OutOfMemoryError...

公司有个项目打算改用 JSF 1.2,界面用 Yui-Ext。JSF 的实现使用 Sun RI,另外使用 Seam + Facelets。不过 Sun 的实现实在没什么组件,需要自己写一些。于是和另外一个同事做了些工作,把 Ext 的组件包装成 JSF 组件。

每个 Ext 组件除了输出HTML 代码之外,还要输出Ext 的 JavaScript代码,
以做一个 UIInput 的组件为例,定义两个方法,用于产生 JavaScript代码,如下:

java 代码
  1. public abstract class ExtInput extends UIInput {   
  2.     /**  
  3.      *  encodeBegin 时产生 JavaScript代码  
  4.      */  
  5.     public String String getBeginningScript() {   
  6.         return null;   
  7.     }   
  8.   
  9.     /**  
  10.      *  encodeEnd 时产生 JavaScript代码  
  11.      */  
  12.     public String String getEndingScript() {   
  13.         return null;   
  14.     }   
  15.   
  16.     @Override  
  17.     public void encodeBegin(FacesContext context) throws IOException {   
  18.         super.encodeBegin(context);   
  19.         ScriptManager.register(getBeginningScript());   
  20.     }   
  21.        
  22.     @Override  
  23.     public void encodeEnd(FacesContext context) throws IOException {   
  24.         super.encodeEnd(context);   
  25.         ScriptManager.register(getEndingScript());   
  26.     }   
  27. }  

继承 ExtInput 类的组件,要输出JavaScript,
只需重写 getBeginningScript() 和 getEndingScript() 方法。
为什么要把输出 JavaScript 代码的功能写在 Component 里面而不是放在 Renderer 呢?
没特别的原因,其实放在Renderer效果是一样的......


上面的代码中使用了一个类 ScriptManager,
它的作用是把所有Ext 组件的 JavaScript 存起来,页面结束时再输出(不知会不会很耗内存...)。
当然,在 encodeBegin 和 encodeEnd 中直接输出 JavaScript 也可
但这样的话,页面的HTML 代码中会穿插很多 Ext 的 JavaScript 代码,不大好看。
ScriptManager:

java 代码
  1. /**  
  2.  * JavaScript 管理器  
  3.  *   
  4.  * @author Tendy  
  5.  *  
  6.  */  
  7. public final class ScriptManager {   
  8.   
  9.     private static ThreadLocal<stringbuilder></stringbuilder> scriptBuffer = new ThreadLocal<stringbuilder></stringbuilder>() {   
  10.         @Override  
  11.         protected StringBuilder initialValue() {   
  12.             return new StringBuilder(128);   
  13.         }   
  14.     };   
  15.   
  16.     /**  
  17.      * 注册 JavaScript  
  18.      * @param script - JavaScript 代码  
  19.      */  
  20.     public static void register(String script) {   
  21.         if (script != null && script.length() > 0)   
  22.             scriptBuffer.get().append(script);   
  23.     }   
  24.        
  25.     /**  
  26.      * 获取 JavaScript 代码  
  27.      * @return  
  28.      */  
  29.     public static String getRegisteredScript() {   
  30.         return scriptBuffer.get().toString();   
  31.     }   
  32.   
  33.     /**  
  34.      * 清除 JavaScript  
  35.      */  
  36.     public static void clear() {   
  37.         scriptBuffer.remove();   
  38.     }   
  39. }   

如果使用这个 ScriptManager,需要写一个简单的组件,在页面最后输出 ScriptManager 所存的 JavaScript 代码,
并清空这些代码。

有了ExtInput 这个基类,就可以开始包装那些 input 类的组件了,例如 Ext 的 DateField。

分享到:
评论

相关推荐

    Ext组件转化成JSF

    ExtJS组件包括其概念、创建方式、与服务器的交互方式以及如何组合组件。JSF技术原理涉及其生命周期、组件模型以及渲染器的概念。同时,了解HTTP和Ajax的基本知识,以及JDK 1.5及以上版本的新特性(如泛型、元数据和...

    第二波又来了:AOM3.2之8款皮肤分享(for extjs3.31)

    这些皮肤的实现主要通过CSS样式表和JavaScript代码来调整ExtJS组件的外观,使得开发者可以轻松地改变整个应用的视觉风格,而无需对核心功能进行修改。 在实际应用中,更换皮肤不仅能够改变应用程序的整体色调和风格...

    java extjs 仿163邮箱源码

    Java和ExtJS是两种在开发Web应用程序时...开发者需要熟悉Java服务器端编程,理解ExtJS组件的使用,并且可能需要对邮件协议和Office文档处理有一定的了解。通过这样的实践,开发者可以提升在Web应用开发中的综合能力。

    EXTJS+RICHFACES

    RichFaces作为内容部分,它的AJAX和JSF组件可以无缝集成到EXTJS界面中,以提供动态数据更新和复杂的用户界面元素。 RichFaces的核心特性包括: 1. **AJAX支持**:RichFaces提供了一系列的AJAX-enabled组件,允许...

    MyEclipse 8.5 + Spket 1.6.18 + ExtJS ext-4.0.0

    1. **下载ExtJS库**:首先需要从官网下载ExtJS 4.0.0版本的库,注意低版本库可能使用不同的格式(如ext.jsb)。 2. **安装Spket插件**:下载SpketIDEPlugin v1.6.18版本,并将其放置在MyEclipse的特定目录下,以确保...

    java-Struts-Hibernatelib.zip_extjs4

    【标题】"java-Struts-Hibernate-lib.zip_extjs4" 涉及的是一个Java Web开发中的集成框架,其中包括了Struts、Hibernate和Spring这三个核心组件,以及ExtJS4前端框架,配合Jbpm4流程引擎和Oracle10g数据库的实践项目...

    liliya

    1. **前言**:阐述了Lilya平台的目标和定位,即在不替换原有ExtJs API的前提下,通过使用ExtJs、WZGrapher等组件简化JSF等技术的开发流程。 2. **Lilya介绍**:针对初次接触Lilya的用户提供入门级教程,旨在快速...

    spket1-1.6.23

    **Spket1-1.6.23:ExtJS与MyEclipse的集成工具** **Spket** 是一款强大的JavaScript开发工具,它提供了一系列的代码补全、代码提示和语法检查功能,极大地提升了JavaScript开发者的工作效率。在1.6.23这个版本中,...

    JavaEExt:使用Java EE和ExtJS进行快速应用程序开发-开源

    在Java EE平台上,JavaEExt利用了诸如Servlet、JSP、JavaServer Faces (JSF) 和Enterprise JavaBeans (EJB) 等核心组件。Servlet负责处理HTTP请求,JSP用于生成动态内容,而JSF则提供了模型-视图-控制器(MVC)架构...

    javascript,css,dhtml,ext3.0,java web,api文档大全中文chm

    `Ext 3.0 中文API.CHM`将帮助开发者了解EXTJS的组件系统、数据绑定、事件处理等高级特性。 **Java Web**:Java Web是指使用Java技术栈开发的Web应用程序,包括Servlet、JSP、JavaServer Faces (JSF) 等。`java web ...

    基于J2EE的客户关系管理系统的设计与实现

    通过深入研究J2EE技术及其相关组件,如AJAX、ExtJS、Struts和Hibernate等,可以更好地满足企业在客户关系管理方面的需求。未来,随着新技术的不断发展,客户关系管理系统的功能和服务也将更加完善。

    J2EE程序员需掌握的技术

    - JSF(Facelets,Richfaces,Ajax4jsf,ICEFaces):提供组件化开发,易于构建用户界面。 - Struts2:基于MVC的框架,整合了许多其他技术如OGNL和拦截器。 - Spring MVC:Spring框架的一部分,提供了强大的MVC...

    java学习线路

    * JSF&lt;选学&gt;:MVC 与 JSF 设计理念、托管 Bean 与导航模型、JSF 流程与事件机制、JSF 标签库、类型转换与输入检验 * EJB 及相关技术:JNPI 与 RMI、会话 Bean 及其生命周期、IoC 与 EJB拦截器、JMS 与 MDB、会话 ...

    java面试宝典和学习必备

    Java 技术是现代软件开发领域中的核心组件,尤其在面试和学习过程中,掌握Java的相关知识点至关重要。以下是一些关键的Java技术要点: 1. **Java三大框架**:SSH(Struts2、Hibernate、Spring)是Java开发中最常见...

    SOA通用架构.docx

    17. **Web前端**:HTML、JavaScript、JSP、JSF、Velocity、EasyUI、ExtJS、jQuery、Struts、SpringMVC、SpringSide等技术构建用户界面,同时,Apache HTTP Server、HttpClient、Nginx等用于Web服务器和反向代理。...

    demo工程列表说明1

    38. **JSF(JavaServer Faces)**:jsf22demo展示了JSF 2.2的应用,包括Facelet模板页面的使用。 39. **JavaScript库**:jslibdemo中包含了不同JavaScript库的示例,如ExtJS的表格控件,Dojo的EnhancedGrid和dgrid...

    java的各种技术.pdf

    JQuery和ExtJS是流行的JavaScript库,提供丰富的UI组件和简化DOM操作。 3. **JavaFX**:JavaFX是一种用于创建桌面和移动设备的现代图形用户界面的平台,使用声明式语法,支持静态类型编程。 4. **JSP/Servlet/...

Global site tag (gtag.js) - Google Analytics