- 浏览: 489235 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 16430引子: 最近看阮一峰先生的这篇文章,文章涉及到观察模式,监听 ... -
破解并汉化flowplayer
2012-10-17 15:30 20142在很久以前,我用actionscript2写了一个播放器,现在 ... -
javascript创建对象的方式(四)
2012-03-21 11:13 1138在上篇博客中,我们使用构造函数的方式创建对象,解决了创建对象友 ... -
javascript创建对象的方式(三)
2012-03-20 13:54 1223在上篇博客中,我们使用工厂方法来创建“人”对象,并在文章最后指 ... -
javascript创建对象的方式(二)
2012-03-19 12:54 1100在上篇博客当中,创建一个“人”的对象需要分散的写一堆代码,并且 ... -
javascript创建对象的方式(一)
2012-03-18 17:47 1435最近复习了一下javascript的基础知识,感觉对这门语言又 ... -
使用HTC技术调用jQuery datequicker
2011-12-07 22:23 1923背景: 公司的ERP是06年左右开发的,当时主流的浏览器是I ... -
jQuery datequicker使用示例
2011-11-25 22:11 2315最近项目中要将一个日期组件替换掉,研究了下jQuery的dat ... -
log4j发送邮件给多人的配置
2011-11-08 10:19 3540测试类: public class Test { ... -
Oracle ADF中使用自定义css实现文字倒立
2011-09-07 09:17 3120需求:如果在我们的系统中要实现一个打印功能,它类似于会议上每个 ... -
Quartz 表达式生成API
2011-08-31 17:37 2993仿照http://www.oschina.net/p/cron ... -
基于socket分布式日志系统的设计与实现
2011-07-08 10:05 3755一、约定 1、本文中分 ... -
如何提高web站点性能的法则
2011-07-04 14:05 1241今天读酷壳上的这篇博客——http://coolshell.c ... -
Oracle ADF框架下实现应用国际化(i18n)示例
2011-05-11 11:41 2242为了将公司新开发的ERP进行国际化,我在现用的Orac ... -
莫斯科javaone大会关于JAX-RS(jersey)的演讲内容
2011-05-11 10:13 1959今天,上Jakub的blog了解关于jersey的最新 ... -
jersey名称的由来
2008-11-02 23:03 1769上周同事说他请教了向Paul Sandoz(jersey项目的 ... -
spring mvc rest 风格改造
2008-09-29 22:58 8982资料收集: http://www.iteye.com/top ... -
Javascript在页面加载时的执行顺序
2008-09-02 23:35 1805一、在HTML中嵌入Javasript的方法 直接在Javas ...
相关推荐
很好的ADF中文资料,Oracle ADF Essentials
Oracle ADF AM常用配置参数参考 1、AM 常用参数 2、AM 压力测试报告 3、AM 参数配置原则 4、AM 参数配置详细说明
Oracle ADF开发实战指南,学习adf好教程。
oracle ADF开发指南第一章 Oracle® Application Development Framework Developer’s Guide For Forms/4GL Developers 10g Release 3 (10.1.3.0) B25947-01
Oracle® Fusion Middleware Understanding Oracle Application Development Framework 12c (12.2.1.3.0) E80020-01 August 2017
1013版本oracleADF开发指南 官方版本
[Packt Publishing] Oracle ADF 11gR2 初学者开发指南 (英文版) [Packt Publishing] Oracle ADF 11gR2 Development Beginner's Guide (E-Book) ☆ 出版信息:☆ [作者信息] Vinod Krishnan [出版机构] Packt ...
Fusion Developer's Guide for Oracle ADF [11.1.1.7]
Oracle 应用程序开发框架 (Oracle ADF) 是一个端到端 JEE 框架,该框架通过提供现成的基础架构服务和虚拟的声明式开发体验,从而简化程序开发。 Oracle ADF的架构是基于MVC设计模式的,ADF把应用程序分成了四层;...
这是Adf多表级联菜单实例其中保存创建Criteria知识,多表关系,以及在Vo中使用vo当前字段过滤结果
describes the architecture and key functionality of the Oracle Application ...JDeveloper 10g Release 3 (10.1.3) to build web applications using Oracle ADF, Enterprise JavaBeans, Oracle TopLink, and JSF.
目前功能最全的JSF框架Oracle ADF 开发资料分享
本文档介绍了Oracle ADF的具体的开发过程,原理,及具体的步骤,以及一些demo。
ADF定义:Application Development Framework是oracle开发的一个基于Jdeveloper的界面化操作MVC开发框架,依赖XML进行数据映射和配置,实现客户端空间“拖拽”数据绑定,大大简化基于MVC的WEB开发
http://www.oracle.com/technetwork/developer-tools/adf/uishell-093084.html
oracle adf web service 案例
Oracle ADF MenuDemo 案例
oracle adf JDeveloper 教程 java j2ee oracle adf JDeveloper 教程 java j2ee oracle adf JDeveloper 教程 java j2ee oracle adf JDeveloper 教程 java j2ee oracle adf JDeveloper 教程 java j2ee
Oracle ADF生存指南涵盖了最新的12c版本,并解释了所有重要的概念和部分,包括ADF Faces,ADF任务流程,ADF业务组件,ADF外观,新的Alta UI以及如何在应用程序的所有层面实现业务逻辑。拥有Oracle数据库和Oracle ...