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 代码
- public abstract class ExtInput extends UIInput {
-
-
-
- public String String getBeginningScript() {
- return null;
- }
-
-
-
-
- public String String getEndingScript() {
- return null;
- }
-
- @Override
- public void encodeBegin(FacesContext context) throws IOException {
- super.encodeBegin(context);
- ScriptManager.register(getBeginningScript());
- }
-
- @Override
- public void encodeEnd(FacesContext context) throws IOException {
- super.encodeEnd(context);
- ScriptManager.register(getEndingScript());
- }
- }
继承 ExtInput 类的组件,要输出JavaScript,
只需重写 getBeginningScript() 和 getEndingScript() 方法。
为什么要把输出 JavaScript 代码的功能写在 Component 里面而不是放在 Renderer 呢?
没特别的原因,其实放在Renderer效果是一样的......
上面的代码中使用了一个类 ScriptManager,
它的作用是把所有Ext 组件的 JavaScript 存起来,页面结束时再输出(不知会不会很耗内存...)。
当然,在 encodeBegin 和 encodeEnd 中直接输出 JavaScript 也可
但这样的话,页面的HTML 代码中会穿插很多 Ext 的 JavaScript 代码,不大好看。
ScriptManager:
java 代码
-
-
-
-
-
-
- public final class ScriptManager {
-
- private static ThreadLocal<stringbuilder></stringbuilder> scriptBuffer = new ThreadLocal<stringbuilder></stringbuilder>() {
- @Override
- protected StringBuilder initialValue() {
- return new StringBuilder(128);
- }
- };
-
-
-
-
-
- public static void register(String script) {
- if (script != null && script.length() > 0)
- scriptBuffer.get().append(script);
- }
-
-
-
-
-
- public static String getRegisteredScript() {
- return scriptBuffer.get().toString();
- }
-
-
-
-
- public static void clear() {
- scriptBuffer.remove();
- }
- }
如果使用这个 ScriptManager,需要写一个简单的组件,在页面最后输出 ScriptManager 所存的 JavaScript 代码,
并清空这些代码。
有了ExtInput 这个基类,就可以开始包装那些 input 类的组件了,例如 Ext 的 DateField。
分享到:
相关推荐
ExtJS组件包括其概念、创建方式、与服务器的交互方式以及如何组合组件。JSF技术原理涉及其生命周期、组件模型以及渲染器的概念。同时,了解HTTP和Ajax的基本知识,以及JDK 1.5及以上版本的新特性(如泛型、元数据和...
这些皮肤的实现主要通过CSS样式表和JavaScript代码来调整ExtJS组件的外观,使得开发者可以轻松地改变整个应用的视觉风格,而无需对核心功能进行修改。 在实际应用中,更换皮肤不仅能够改变应用程序的整体色调和风格...
Java和ExtJS是两种在开发Web应用程序时...开发者需要熟悉Java服务器端编程,理解ExtJS组件的使用,并且可能需要对邮件协议和Office文档处理有一定的了解。通过这样的实践,开发者可以提升在Web应用开发中的综合能力。
RichFaces作为内容部分,它的AJAX和JSF组件可以无缝集成到EXTJS界面中,以提供动态数据更新和复杂的用户界面元素。 RichFaces的核心特性包括: 1. **AJAX支持**:RichFaces提供了一系列的AJAX-enabled组件,允许...
1. **下载ExtJS库**:首先需要从官网下载ExtJS 4.0.0版本的库,注意低版本库可能使用不同的格式(如ext.jsb)。 2. **安装Spket插件**:下载SpketIDEPlugin v1.6.18版本,并将其放置在MyEclipse的特定目录下,以确保...
【标题】"java-Struts-Hibernate-lib.zip_extjs4" 涉及的是一个Java Web开发中的集成框架,其中包括了Struts、Hibernate和Spring这三个核心组件,以及ExtJS4前端框架,配合Jbpm4流程引擎和Oracle10g数据库的实践项目...
1. **前言**:阐述了Lilya平台的目标和定位,即在不替换原有ExtJs API的前提下,通过使用ExtJs、WZGrapher等组件简化JSF等技术的开发流程。 2. **Lilya介绍**:针对初次接触Lilya的用户提供入门级教程,旨在快速...
**Spket1-1.6.23:ExtJS与MyEclipse的集成工具** **Spket** 是一款强大的JavaScript开发工具,它提供了一系列的代码补全、代码提示和语法检查功能,极大地提升了JavaScript开发者的工作效率。在1.6.23这个版本中,...
在Java EE平台上,JavaEExt利用了诸如Servlet、JSP、JavaServer Faces (JSF) 和Enterprise JavaBeans (EJB) 等核心组件。Servlet负责处理HTTP请求,JSP用于生成动态内容,而JSF则提供了模型-视图-控制器(MVC)架构...
`Ext 3.0 中文API.CHM`将帮助开发者了解EXTJS的组件系统、数据绑定、事件处理等高级特性。 **Java Web**:Java Web是指使用Java技术栈开发的Web应用程序,包括Servlet、JSP、JavaServer Faces (JSF) 等。`java web ...
通过深入研究J2EE技术及其相关组件,如AJAX、ExtJS、Struts和Hibernate等,可以更好地满足企业在客户关系管理方面的需求。未来,随着新技术的不断发展,客户关系管理系统的功能和服务也将更加完善。
- JSF(Facelets,Richfaces,Ajax4jsf,ICEFaces):提供组件化开发,易于构建用户界面。 - Struts2:基于MVC的框架,整合了许多其他技术如OGNL和拦截器。 - Spring MVC:Spring框架的一部分,提供了强大的MVC...
* JSF<选学>:MVC 与 JSF 设计理念、托管 Bean 与导航模型、JSF 流程与事件机制、JSF 标签库、类型转换与输入检验 * EJB 及相关技术:JNPI 与 RMI、会话 Bean 及其生命周期、IoC 与 EJB拦截器、JMS 与 MDB、会话 ...
Java 技术是现代软件开发领域中的核心组件,尤其在面试和学习过程中,掌握Java的相关知识点至关重要。以下是一些关键的Java技术要点: 1. **Java三大框架**:SSH(Struts2、Hibernate、Spring)是Java开发中最常见...
17. **Web前端**:HTML、JavaScript、JSP、JSF、Velocity、EasyUI、ExtJS、jQuery、Struts、SpringMVC、SpringSide等技术构建用户界面,同时,Apache HTTP Server、HttpClient、Nginx等用于Web服务器和反向代理。...
38. **JSF(JavaServer Faces)**:jsf22demo展示了JSF 2.2的应用,包括Facelet模板页面的使用。 39. **JavaScript库**:jslibdemo中包含了不同JavaScript库的示例,如ExtJS的表格控件,Dojo的EnhancedGrid和dgrid...
JQuery和ExtJS是流行的JavaScript库,提供丰富的UI组件和简化DOM操作。 3. **JavaFX**:JavaFX是一种用于创建桌面和移动设备的现代图形用户界面的平台,使用声明式语法,支持静态类型编程。 4. **JSP/Servlet/...