- 浏览: 494246 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
xuezhongyu01:
这个翻译是错误的,transfer是烙印或者印记的意思,所以是 ...
REST介绍 -
fanqi77:
例子中没有体现出 不同自定义exception的用途和区别
Jersey框架的统一异常处理机制 -
redhacker:
sz7250 写道恩。不错,初步了解一下rest设计概念。谢谢 ...
REST介绍 -
redhacker:
u012824908 写道运行出来以后,提示信息出现乱码,该如 ...
Jersey框架的统一异常处理机制 -
sz7250:
恩。不错,初步了解一下rest设计概念。
REST介绍
需求:在我们的信息系统中,为了用户体验,通常会有如下图的字数统计功能:
在传统的jsp页面里实现这样的功能,相信各位同学都会轻车熟路,但是当我们使用了oracle adf框架后,实现这个功能,尽然花费了我一天的时间,原因是,企图使用oracle adf自己封装的js api实现,结果是徒劳。原因如下:
先来看一下源代码:
分析:
1、在这个页面中,我使用了oracle adf js api查找一个页面对象,设置其值,但af:clientListener这个标签的监听事件类型设为type="keyUp",根本不是想象的那样(当键盘键弹起时触发),只有当焦点移开af:inputText备注框时,才能触发。
2、oracle adf js api都是发送一些异步的ajax请求,上面的这个例子在备注输入框失去焦点的时候也能统计出结果,但是,似乎是由于ajax 异步请求后台处理的原因,统计很不流畅,甚至有很大的延迟,用户体验非常差。
基于上述两个原因,我继续寻求其他的解决办法,我在想,这样统计字数的功能,在使用jsp或html的时候,我们通常都是用前台的js技术解决,根本不需要与后台服务器交互,那么,在这里,我们能不能也这样处理呢?想到这里,我的思路豁然开朗,我借助firebug的强大功能,分析了上面代码在浏览器中解析后的结构,见如下图:
这样以来,我将上面的代码改为如下代码,最终达到了我们想要的效果:
代码里都做了详细的注释,我这里就不在赘述。值得一提的是,在最后ie和firefox兼容性上遇到了点麻烦,对于html的span标记的操作,firefox不支持innerText属性,最后改为textContent,但对于对undefined的比较变量,要使用typeof进行转换,是我之前不知道的知识点,经过查找资料解决了兼容性问题。
总结:
从上面的例子可以看到,对于oracle adf的js api如果在使用时不是那么得心应手,我们通过上面的方法,同样可以回归到最基础的html、js方式进行处理,这样就突破的oracle adf框架的限制,实现许多我们自己想要的功能。
值得一提的是,如果我们确定要使用原生的js api来操作html dom树实现自己的功能,兼容性是个问题,这就要求我们借助httpwatch(ie下使用)和firebug(firefox下使用)这些工具进行相应的调试,这一定程度上对我们的开发带来了难度,因此,这就要求我们对基础知识有足够的掌握,才能利用好任何的开发框架,在提高效率的同时,又能利用基础知识解决框架不能解决的难题。
在传统的jsp页面里实现这样的功能,相信各位同学都会轻车熟路,但是当我们使用了oracle adf框架后,实现这个功能,尽然花费了我一天的时间,原因是,企图使用oracle adf自己封装的js api实现,结果是徒劳。原因如下:
先来看一下源代码:
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:trh="http://myfaces.apache.org/trinidad/html"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <f:view> <af:document id="d1" title="不能正常工作的字数自动统计输入框实验"> <trh:script id="showAutoNum"> var leftLen = 300; function counterNum2(actionEvent) { var component = actionEvent.getSource(); var markContent = component.findComponent("markContent"); var content = markContent.getValue(); var usedLen = content.length; var maxLen = markContent.getMaximumLength(); leftLen = maxLen - usedLen; var showNum = AdfPage.PAGE.findComponent("showNum"); showNum.setValue("可写 " + leftLen + " 字"); } </trh:script> <af:panelSplitter id="ps1"> <f:facet name="first"> <af:panelGroupLayout layout="scroll" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" id="pgl1"> <af:inputText label="备注" id="markContent" rows="10" clientComponent="true" maximumLength="300"> <af:clientListener type="keyUp" method="counterNum2"/> </af:inputText> </af:panelGroupLayout> </f:facet> <f:facet name="second"> <af:outputText id="showNum" value="可写 300 字" clientComponent="true"/> </f:facet> </af:panelSplitter> </af:document> </f:view> </jsp:root>
分析:
1、在这个页面中,我使用了oracle adf js api查找一个页面对象,设置其值,但af:clientListener这个标签的监听事件类型设为type="keyUp",根本不是想象的那样(当键盘键弹起时触发),只有当焦点移开af:inputText备注框时,才能触发。
2、oracle adf js api都是发送一些异步的ajax请求,上面的这个例子在备注输入框失去焦点的时候也能统计出结果,但是,似乎是由于ajax 异步请求后台处理的原因,统计很不流畅,甚至有很大的延迟,用户体验非常差。
基于上述两个原因,我继续寻求其他的解决办法,我在想,这样统计字数的功能,在使用jsp或html的时候,我们通常都是用前台的js技术解决,根本不需要与后台服务器交互,那么,在这里,我们能不能也这样处理呢?想到这里,我的思路豁然开朗,我借助firebug的强大功能,分析了上面代码在浏览器中解析后的结构,见如下图:
这样以来,我将上面的代码改为如下代码,最终达到了我们想要的效果:
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:trh="http://myfaces.apache.org/trinidad/html"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <f:view> <af:document id="d1" title="desc:auto count textarea input demo by using oracle adf framework. author:beanor@gmail.com"> <af:panelSplitter id="ps1" orientation="vertical" collapsed="false" disabled="true" splitterPosition="200"> <f:facet name="first"> <af:inputText label="备注" id="markContent" rows="10" clientComponent="true" maximumLength="300"></af:inputText> </f:facet> <f:facet name="second"> <af:outputText id="showNum" value="可写 300 字" clientComponent="true"/> </f:facet> </af:panelSplitter> <trh:script id="autoCountInput"> //获取输入框对象,markContent为af:inputText的id var markContentObj = document.getElementById('markContent::content'); //获取显示字数对象,showNum为af:outputText的id var showNumObj = document.getElementById('showNum'); //设置输入框背景 markContentObj.style.backgroundColor = "White"; //设置输入框监听函数 markContentObj.onkeyup = function () { //获取输入框中的字符串 var markContent = markContentObj.value; //获取输入框中的字符串的长度 var usedLen = markContent.length; //无法直接获取输入框允许输入的最大数,请保持与af:inputText的maximumLength一致 var maxLen = 300; //计算还剩余多少字可输入 var leftLen = maxLen - usedLen; var showNum = showNumObj.innerText; //设置界面显示剩余的字数 var showMsg = "可写 " + leftLen + " 字"; if (typeof(showNum) == "undefined") { showNumObj.textContent = showMsg; } else { showNumObj.innerText = showMsg; } }; </trh:script> </af:document> </f:view> </jsp:root>
代码里都做了详细的注释,我这里就不在赘述。值得一提的是,在最后ie和firefox兼容性上遇到了点麻烦,对于html的span标记的操作,firefox不支持innerText属性,最后改为textContent,但对于对undefined的比较变量,要使用typeof进行转换,是我之前不知道的知识点,经过查找资料解决了兼容性问题。
总结:
从上面的例子可以看到,对于oracle adf的js api如果在使用时不是那么得心应手,我们通过上面的方法,同样可以回归到最基础的html、js方式进行处理,这样就突破的oracle adf框架的限制,实现许多我们自己想要的功能。
值得一提的是,如果我们确定要使用原生的js api来操作html dom树实现自己的功能,兼容性是个问题,这就要求我们借助httpwatch(ie下使用)和firebug(firefox下使用)这些工具进行相应的调试,这一定程度上对我们的开发带来了难度,因此,这就要求我们对基础知识有足够的掌握,才能利用好任何的开发框架,在提高效率的同时,又能利用基础知识解决框架不能解决的难题。
发表评论
-
JS实现监听模式和观察者模式
2012-12-28 16:02 16589引子: 最近看阮一峰先生的这篇文章,文章涉及到观察模式,监听 ... -
破解并汉化flowplayer
2012-10-17 15:30 20311在很久以前,我用actionscript2写了一个播放器,现在 ... -
javascript创建对象的方式(四)
2012-03-21 11:13 1184在上篇博客中,我们使用构造函数的方式创建对象,解决了创建对象友 ... -
javascript创建对象的方式(三)
2012-03-20 13:54 1264在上篇博客中,我们使用工厂方法来创建“人”对象,并在文章最后指 ... -
javascript创建对象的方式(二)
2012-03-19 12:54 1147在上篇博客当中,创建一个“人”的对象需要分散的写一堆代码,并且 ... -
javascript创建对象的方式(一)
2012-03-18 17:47 1481最近复习了一下javascript的基础知识,感觉对这门语言又 ... -
使用HTC技术调用jQuery datequicker
2011-12-07 22:23 2008背景: 公司的ERP是06年左右开发的,当时主流的浏览器是I ... -
jQuery datequicker使用示例
2011-11-25 22:11 2361最近项目中要将一个日期组件替换掉,研究了下jQuery的dat ... -
log4j发送邮件给多人的配置
2011-11-08 10:19 3590测试类: public class Test { ... -
Oracle ADF中使用自定义css实现文字倒立
2011-09-07 09:17 3166需求:如果在我们的系统中要实现一个打印功能,它类似于会议上每个 ... -
Quartz 表达式生成API
2011-08-31 17:37 3032仿照http://www.oschina.net/p/cron ... -
基于socket分布式日志系统的设计与实现
2011-07-08 10:05 3797一、约定 1、本文中分 ... -
如何提高web站点性能的法则
2011-07-04 14:05 1268今天读酷壳上的这篇博客——http://coolshell.c ... -
Oracle ADF框架下实现应用国际化(i18n)示例
2011-05-11 11:41 2314为了将公司新开发的ERP进行国际化,我在现用的Orac ... -
莫斯科javaone大会关于JAX-RS(jersey)的演讲内容
2011-05-11 10:13 2000今天,上Jakub的blog了解关于jersey的最新 ... -
jersey名称的由来
2008-11-02 23:03 1852上周同事说他请教了向Paul Sandoz(jersey项目的 ... -
spring mvc rest 风格改造
2008-09-29 22:58 9049资料收集: http://www.iteye.com/top ... -
Javascript在页面加载时的执行顺序
2008-09-02 23:35 1842一、在HTML中嵌入Javasript的方法 直接在Javas ...
相关推荐
### Oracle ADF 开发指南知识点总结 #### 一、Oracle ADF 概述 - **Oracle ADF**(Application Development Framework)是一个全面的应用程序开发框架,它基于J2EE标准和开源技术,专为简化企业级应用开发而设计。...
在Oracle ADF (Application Development Framework) 应用程序中,AM (Application Module) 是一个关键组件,用于处理业务逻辑并提供数据访问功能。为了确保AM能够高效稳定地运行,正确配置AM的相关参数至关重要。...
在Oracle ADF中,级联菜单(Cascading Menus)是常见的一种交互元素,尤其在处理多表关联数据时非常实用。级联菜单允许用户在选择一个选项后,根据该选项的值动态地过滤下一级菜单的内容,这样可以提供更加直观和...
- 部署选项:Oracle ADF应用可以部署在多种服务器环境中,包括Oracle WebLogic Server、Oracle GlassFish Server等,支持高可用性和性能优化。 5. **最佳实践与常见问题**: - **性能优化**:了解ADF的缓存机制,...
### Oracle ADF 架构与关键功能概述 Oracle Application Development Framework(简称 Oracle ADF)是Oracle提供的一套全面的应用开发框架,旨在简化企业级Java应用的构建过程。它结合了Oracle JDeveloper工具集来...
### Oracle ADF 开发指南知识点概述 #### 一、Oracle ADF 概念与特性 - **Oracle Application Development Framework (ADF)**:Oracle ADF 是一套用于简化 Java 应用程序开发的完整框架,旨在帮助开发者快速构建高...
### 基于Oracle ADF 的应用程序开发过程详解 #### 一、Oracle ADF 概述 Oracle ADF (Application Development Framework) 是由 Oracle 公司推出的一款旨在简化 J2EE 应用程序开发复杂度的框架。ADF 的核心价值在于...
- **为何选择Oracle ADF**:ADF提供了丰富的功能,包括简化数据绑定、支持多种UI技术(如JSF)、自动处理事务管理和安全性等,这些都使得开发者能够更专注于业务逻辑而不是底层技术细节。 #### 二、Oracle ADF架构 ...
《Fusion Developer's Guide for Oracle ADF》是一本详尽的技术手册,旨在帮助开发人员充分利用 ADF 的强大功能来构建高质量的企业应用。通过对 ADF 的各个方面的深入探讨,本书不仅适用于初学者,也适合希望深入...
Oracle® Fusion Middleware Understanding Oracle Application Development Framework 12c (12.2.1.3.0) E80020-01 August 2017
"基于Oracle ADF的校园OA系统的设计与实现" 一、系统概述 Oracle ADF(Application Development Framework)是一种基于Java的应用程序开发框架,旨在帮助开发人员快速构建企业级应用程序。使用Oracle ADF,可以...
Oracle ADF框架提供了丰富的功能组件,例如ADF Business Components、ADF Data Binding、ADF Controller、ADF Faces、ADF Task Flows等,这些组件可以简化企业级应用的开发过程。 ADF Business Components是ADF框架...
[Packt Publishing] Oracle ADF 11gR2 初学者开发指南 (英文版) [Packt Publishing] Oracle ADF 11gR2 Development Beginner's Guide (E-Book) ☆ 出版信息:☆ [作者信息] Vinod Krishnan [出版机构] Packt ...
### Oracle ADF Faces Rich Client 11g 开发文档知识点概览 #### 一、概述 Oracle ADF (Application Development Framework) 是一个用于快速构建企业级应用的强大框架,它简化了Java EE应用程序的开发过程。其中ADF...
在这个案例中,我们将深入探讨Oracle ADF的核心概念和功能,以及MenuDemo的具体实现。 首先,Oracle ADF是基于JSF(JavaServer Faces)的,这意味着它利用了JSF的UI组件和生命周期,提供了一种声明式的方式来创建...
- **Web Service Data Control**:ADF中的数据控制允许开发者轻松地与Web服务进行交互,提供了诸如调用操作、绑定到UI组件等功能。 - **JDeveloper集成**:Oracle JDeveloper IDE提供了对ADF Web Service的全面...
- **高度集成**:Oracle ADF与Oracle的技术栈紧密结合,可以无缝集成到Oracle的其他产品和服务中。 - **开发效率高**:通过使用Oracle JDeveloper等工具,开发者可以快速构建复杂的应用程序,大大缩短了开发周期。 -...