JavaScript进阶(十一)JsJava2.0版本

2007年9月11日,JsJava团队发布了JsJava2.0版本,该版本不仅增加了许多新的类库,而且参照J2SE1.4,大量使用了类的继承和实现机制,更加符合面向对象的原则,也更加方便用户使用和扩充,而且对原来版本中存在一些bug进行了修改,下面主要介绍一下2.0版的主要功能。

1. 实现了完整的聚集(collections)框架

主要包括列表(List)、哈西表(Hashtable)、集合(Set)、位集合(BitSet)、属性表(Properties)、迭代器(Iterator)、堆栈(Stack)、枚举器(Enumeration)、比较器(Comparator)等等,这大大方便了与聚集相关的操作,例如:

var list=new ArrayList();

list.add("a");

list.add("b");

list.add(new Date());

Iterator it=list.iterator();

while(it.hasNext()){

var elem=it.next();

}

var hash=new Hashtable();

hash.put("key1","value1");

hash.put(new Date(),"value2");

var set=new TreeSet();

set.add("a");

2. 实现了xml的处理

主要是对主流浏览器的内置xml解析做了封装,2.0版本中对非IE的Xpath做了很好的封装,因此可以直接使用JsJava2.0的xpath来处理xml文本,下面举一个使用JsJava xml处理的例子:

var xp=new XmlBrowserParser();

var xml="user1user2user3";

xp.loadXml(xml);

var xmlDoc=xp.toDocument();

var usersElem=xmlDoc.getElementsByTagName("user");

document.write("The number of user tag:"+usersElem.length);

//You can alse use xpath

var usersElem= xmlDoc.documentElement.selectNodes("user");

document.write("The number of user tag:"+usersElem.length);

3. 实现了对部分高等数学算的支持

包括矩阵、概率分布、统计、复数等等,具体可以参考http://jsjava.sourceforge.net/solutions/mathsolution.html ,下面举一个简单例子:

var c=new Complex(3,5);

document.write(c.abs()+"");

document.write(c.add(new Complex(5,7))+"");

document.write(c.conjugate()+"");

document.write(c.isInfinite()+"");

document.write(c.isNaN()+"");

document.write(c.multiply(new Complex(6,6)).getReal()+"");

document.write(c.negate()+"");

document.write(c.subtract(new Complex(2,4)));

4. 实现了对日期和数字的格式化处理

这个在实际编程中是非常方便的,例如:

var df=new SimpleDateFormat();

df.applayPattern("MM-dd-yyyy hh:mm:ss");

var str=df.format(new Date());

alert(str);//结果形式形如:11-25-2006 13:23:35

var df=new DecimalFormat();

df.applayPattern("00.000%");

var str=df.format(0.0678567);

alert(str);// the result is 6.786%

5. 实现了数据验证,并默认支持了多种验证器,包括URL、Email、范围、IP等验证器

例如:

var urlValidator=new URLValidator();

var flag=urlValidator.validate("http://www.jsjava.com");

alert(flag);//the result is true

而且提供了一个通用的验证工具类ValidatorUtils,里面提供许多实用类方法,另外针对中国地区用户我们实现了许多常用的一些验证器,例如汉字验证、居民身份证验证、Oicq号码验证等等。

6. 实现了页面动画的支持

动画的播放原理,借鉴了Flash的思想,即一个动画是有一系列场景组成,每个场景是由一系列关键帧组成,而每一个帧则代表了一个实际控制点,那么当时间线流过的时候,多个场景的帧依次播放,就形成了任意线程合成动画效果,具体可以参考http://jsjava.sourceforge.net/solutions/webpageanimation.html。

7. 实现了对Ajax的支持

JsJava2.0中对Ajax做了一层面向对象的封装,留出了许多接口,可以让编程人员更多的控制Ajax的细节,举例如下:

var req=new AjaxRequest();

req.setRequestMethod("post");

req.setRequestURL("ajaxresponse.jsp");

req.setAsync(true);

req.setMethodOnSuccess(parseXml);

req.setRequestHeader("Content-Type","text/html;charset=gb2312");

req.send();

function parseXml(){

alert(req.getResponseText());

}

8. 实现了对地理信息的封装

JsJava2.0主要实现了对中国省级、市级行政区的信息封装,可以方便获取相关信息,例如:

function w(str){

document.write(str+"");

}

var country=ChinaInformationLoader.load();

w(country);

w("---------------");

var province=country.getProvinceById("Guangxi");

w(province);

w("---------------");

var cities=province.getCities();

9. 实现了对日历和农历的支持

日历对象Calendar是参照java.util.Calendar实现的,农历仅实现对中国农历的支持,举例如下:

var c = new GregorianCalendar();

c.setTime(new Date(2007,2,8));

document.write("Calendar.WEEK_OF_YEAR:"+c.get(Calendar.WEEK_OF_YEAR);

通过JsJava的日历对象,你可以方便的获得与日期相关的许多方面,例如可以知道某个日期是所在月的第几周,知道是这一年中的第几天等等,如果你对Java的Calendar很熟悉,你就明白它的强大了。

输出为:Calendar.WEEK_OF_YEAR:10

另外,为了方便中国区用户对农历的计算,我们特别定义了一个ChinaLunarCalendar对象,该对象可以方便将公历转换为农历,例如下面的例子:

var c=new ChinaLunarCalendar();

c.setTime(new Date(2005,5,6));

out(c.getTianGan()+":"+c.getDescOfTianGan());

out(c.getDiZhi()+":"+c.getDescOfDiZhi());

out(c.getShengXiao()+":"+c.getDescOfShengXiao());

out(c.getYear()+":"+c.getDescOfYear());

out(c.getMonth()+":"+c.getDescOfMonth());

out(c.getDate()+":"+c.getDescOfDate());

out(c.getDay()+":"+c.getDescOfDay());

out(c.getHours()+":"+c.getDescOfHours());

function out(str){

document.write(str+"");

}

输出结果为:

1:乙

9:酉

9:鸡

2005:乙酉年

4:四月

30:卅

1:星期一

1:子时

10. 实现了对I/O的支持

I/O是重量级编程语言中都支持的输入/输出的各种操作,例如读取系统中的文件,或者将内容输入到本地文件系统中,当然I/O的概念的外延很广,例如可以从某个URL来获取URL所代表的资源的内容,那么这就代表了一个输入。

那么I/O体现到Web界面之中,又该如何解释呢?我们知道在HTML之中,有文本输入空间text input和textarea,这个可以理解为输入设备,而等则可以看做是输出设备,当然了对于text input和textarea而言,它们也可以被看做是输出设备,我们看一个JsJava中的一个实现:

window.onload=function(){

var outputDevice=new HTMLTextDevice("info");

var append=true;

Var outputStream=new HTMLTextOutputStream(new OutputStream(outputDevice),append);

outputStream.println("This is a text output stream!");

outputStream.println("Is append:"+append);

}

另外我们为JS添加了一个类似系统命令行窗口的JS控制台,使用方式如下:

Console.open();

System.out.println("This is very good!");

System.out.println("Now ok!");

function getNowTime(){

System.out.println("start method");

}

11. 实现了对blog中rss内容的解析

并将解析后的结果生成为一系列的JsJava对象,操作起来很方便,如下例子所示:

var xmlStr='eye_of_back的专栏 - IT技术经验交流中心http://blog.csdn.net/eye_of_back/category/245118.aspxaf.Text Version 1.0.1.1http://counter.csdn.net/pv.aspx?id=72回眸IT技术经验交流中心简介...(rss xml内容较多省略)';

var reader=new BlogRssReader();

var blogRss=reader.readRss(xmlStr);

var channel=blogRss.getRssChannel();

document.write(channel.getImage()+"

");

var items=channel.getItems();//获取该频道所有的文章

for(var i=0;i

显示结果为:

{title=undefined,link=undefined,url=http://counter.csdn.net/pv.aspx?id=72}

{id=http://blog.csdn.net/eye_of_back/archive/2007/02/28/1517453.aspx,creator=回眸,title=IT技术经验交流中心简介,link=http://blog.csdn.net/eye_of_back/archive/2007/02/28/1517453.aspx,pubDate=Wed, 28 Feb 2007 20:00:00 GMT,comments={id=http://blog.csdn.net/eye_of_back/comments/1517453.aspx,itemId=undefined,commentRss=undefined}}

{id=http://blog.csdn.net/eye_of_back/archive/2007/02/25/1514302.aspx,creator=回眸,title=面对未来我们更需要思考,link=http://blog.csdn.net/eye_of_back/archive/2007/02/25/1514302.aspx,pubDate=Sun, 25 Feb 2007 21:39:00 GMT,comments={id=http://blog.csdn.net/eye_of_back/comments/1514302.aspx,itemId=undefined,commentRss=undefined}}

{id=http://blog.csdn.net/eye_of_back/archive/2007/02/09/1506668.aspx,creator=回眸,title=介绍目前中心关注的群,link=http://blog.csdn.net/eye_of_back/archive/2007/02/09/1506668.aspx,pubDate=Fri, 09 Feb 2007 22:24:00 GMT,comments={id=http://blog.csdn.net/eye_of_back/comments/1506668.aspx,itemId=undefined,commentRss=undefined}}

{id=http://blog.csdn.net/eye_of_back/archive/2007/02/09/1506666.aspx,creator=回眸,title=中心知识库建成!,link=http://blog.csdn.net/eye_of_back/archive/2007/02/09/1506666.aspx,pubDate=Fri, 09 Feb 2007 22:21:00 GMT,comments={id=http://blog.csdn.net/eye_of_back/comments/1506666.aspx,itemId=undefined,commentRss=undefined}}

{id=http://blog.csdn.net/eye_of_back/archive/2006/10/10/1328096.aspx,creator=回眸,title=面向大学生IT技术培训,link=http://blog.csdn.net/eye_of_back/archive/2006/10/10/1328096.aspx,pubDate=Tue, 10 Oct 2006 07:44:00 GMT,comments={id=http://blog.csdn.net/eye_of_back/comments/1328096.aspx,itemId=undefined,commentRss=undefined}}

{id=http://blog.csdn.net/eye_of_back/archive/2006/10/09/1327718.aspx,creator=回眸,title=欢迎大家访问IT技术经验交流中心,link=http://blog.csdn.net/eye_of_back/archive/2006/10/09/1327718.aspx,pubDate=Mon, 09 Oct 2006 21:11:00 GMT,comments={id=http://blog.csdn.net/eye_of_back/comments/1327718.aspx,itemId=undefined,commentRss=undefined}}

12. 实现了对页面打印的支持

当然了调用的window.print就可以实现页面整体打印,但是在实际应用中,我们用的更多的则是对页面中某个部分进行打印,例如只想打印文章正文内容,对于上面的边框和下面的一些按钮就不需要,那如何实现局部的打印呢?

当然通常的做法有两种,一种是打印前将不需要的页面部分隐藏,打印完成后再放开,这个只要定义document的onbeforeprint和onafterprint事件即可,另外一种方式,就是将需要打印的内容拷贝到事先准备好的一个隐藏的iframe之中,然后调用iframe的打印即可。

那么JsJava之中如果方便的对打印提供支持呢?如下面的代码:

var print=new HtmlPrint();

var printArea=new HtmlPrintArea("info");//打印区域的页面id,例如可能是某个div的标识

print.setArea(printArea);

print.print();

具体使用和方案,可以访问http://www.jsjava.com网站,参看其中的solutions。

13. 实现了对光标的操作

尤其是web程序员们都非常苦恼的光标定位等问题,JsJava2.0都做了很好的实现,通过JsJava的API,你可以方便的获得光标在文本输入域中的具体位置,可以方便的将光标移动到文本框的指定位置,也可以任意选择指定范围的文本,例如下面的例子:

function getCursorPosition(textObj){

alert(CursorUtils.getCursorPosition(textObj));

}

function setCursorPos(){

CursorUtils.moveCursorTo(document.getElementById("t"),8);

}

function setSelectText(){

CursorUtils.textSelect(document.getElementById("t"),8,12);

}

14. 实现了对系统剪贴板的操作,可以方便的将内容放到到剪贴板以及从剪贴板中获取内容

例如下面的例子:

function getData(){

var data=ClipboardUtils.getTextFromClipboard();

t.value=data;

}

function setData(){

ClipboardUtils.copyTextToClipboard("This is a copy test!");

}

15. 实现了对颜色的相关操作

例如实现了RGB颜色以及灰度的控制,可以方便的在RGB和十六进制颜色之间进行转换,也提供了相关方法,可以方便的得到一个随机的颜色矩阵,这为颜色面板的制作提供了很好的数据,例如:

var hexColors=ColorUtils.toPaletteDatum(9,9);

var str="";

for(var i=0;i";

for(var j=0;j  ";

}

str+="";

}

str+="";

document.write(str);

显示结果为:

[attach]58362[/attach]

16. 除上面之外,JsJava2.0还实现了许多其他的功能

具体可以参考 http://jsjava.sourceforge.net/howtouse/

JsJava发展到2.0版本,已经完全可以作为一个JS基础框架和应用框架,支持界面端JS产品的开发,也适合于web项目和产品的日常开发与应用,JsJava的关注点是数据结构的完整和类库体系的完整,这与目前流程的portotype.js等是不太一样,因此JsJava是更适合为应用服务的...

JavaScript进阶(十一)JsJava2.0版本的更多相关文章

  1. JavaScript 引擎「V8」发布 8.0 版本,内存占用量大幅下降

    上周,JavaScript 引擎「V8」的开发团队在该项目官方网站上正式宣布推出最新的 8.0 版本.这次更新的重点主要集中在错误修复及性能改善上,正式的版本将在数周后随着谷歌 Chrome 80 稳 ...

  2. #笔记#JavaScript进阶篇一

    #JavaScript进阶篇 http://www.imooc.com/learn/10 #认识DOM #window对象 浏览器窗口可视区域监测—— 在不同浏览器(PC)都实用的 JavaScrip ...

  3. JavaScript进阶(九)JS实现本地文件上传至阿里云服务器

    JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...

  4. javascript进阶之AJAX

    AJAX 一 AJAX预备知识:json进阶 1.1 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javas ...

  5. JavaScript进阶--慕课网学习笔记

                         JAVASCRIPT—进阶篇 给变量取个名字(变量命名) 变量名字可以任意取,只不过取名字要遵循一些规则: 1.必须以字母.下划线或美元符号开头,后面可以跟字 ...

  6. JavaScript进阶知识点——函数和对象详解

    JavaScript进阶知识点--函数和对象详解 我们在上期内容中学习了JavaScript的基本知识点,今天让我们更加深入地了解JavaScript JavaScript函数 JavaScript函 ...

  7. JavaScript进阶内容——DOM详解

    JavaScript进阶内容--DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? JavaScript ...

  8. JavaScript获取浏览器类型与版本

    从网上找到一段使用JavaScript判断浏览器以及浏览器版本的比较好的代码,在此记录一下: <script type="text/javascript"> var S ...

  9. BSON 1.0版本规范(翻译)

    BSON 1.0版本规范 本文翻译自 http://bsonspec.org/spec.html BSON是用于存储零个或多个键/值对为一个单一的实体的一个二进制格式.我们称这个实体为文档(Docum ...

随机推荐

  1. Ubuntu命令行启动Matlab

    原文转自:http://blog.csdn.net/striker_v/article/details/52884485 小编安装的是Matlab R2015b,使用的是默认安装目录,安装在目录/us ...

  2. Lucene总结

    数据的分类 结构化数据:有固定类型或者有固定长度的数据 例如:数据库中的数据(mysql,oracle等), 元数据(就是windows中的数据) 结构化数据搜索方法: 数据库中数据通过sql语句可以 ...

  3. Sublime Text 3下C/C++开发环境搭建

    Sublime Text 3下C/C++开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text. 1.Sublime Text 3安装 Ubuntu.Linux ...

  4. 计算机网络之远程终端协议TELNET

    TELNET 是一个简单的远程终端协议.用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址). TELNET 能将用户的击键传到远地主机 ...

  5. Dynamics CRM Entity Relationship Many to Many (N:N)

    该博客对N:N的关系的查询列出了两种方式,一种RetrieveMultipleRequest,一种Fetch XML ,有谁对N:N关系的查询了解不是很深的可以学习下. http://andreasw ...

  6. 奥比中光Orbbec Astra Pro RGBD 3D视觉传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示

    Orbbec Astra Pro传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示 这款摄像头使用uvc输入彩色信息,需要libuvc和libuvc_ros这样才能在R ...

  7. 目标管理体系:OKR

    一.什么是OKR体系? OKR体系的全称是Objectives & Key Results,即目标与关键成果.所谓OKR,O = Objective 可以理解为企业目标,KR =Key Res ...

  8. OpenCV+OpenGL 双目立体视觉三维重建

    0.绪论 这篇文章主要为了研究双目立体视觉的最终目标--三维重建,系统的介绍了三维重建的整体步骤.双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维 ...

  9. How to generate the complex data regularly to Ministry of Transport of P.R.C by DB Query Analyzer

    How to generate the complex data regularly to Ministry of Transport of P.R.C by DB Query Analyzer 1 ...

  10. EBS总账模块与其他模块数据关联关系

    表名:GL_IMPORT_REFERENCES 说明:总账导入附加信息表 用途:用来追溯从子模块传入总账模块的明细,对于报表开发很有帮助 SQL 语句: select * from gl_je_hea ...