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. ejabberd为游戏免除注册限制

    ejabberd为游戏免除注册限制 (金庆的专栏 2016.11) ejabberd聊天服务器默认会限制同一IP注册帐号须间隔600s. 在游戏中需要为每个角色注册一个聊天帐号,不应该有此限制. 可以 ...

  2. Java经典设计模式之七大结构型模式(附实例和详解)

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...

  3. 剑指Offer——毕业生求职网站汇总(干货)

    剑指Offer--毕业生求职网站汇总(干货) 致2017即将毕业的你~ 精品网站 牛客网:https://www.nowcoder.com 赛码网:http://www.acmcoder.com/ 招 ...

  4. DOS界面下的翻译软件制作

    准备 素材 依赖 接口 地址 参数 返回值解析 编码及测试 功能代码 运行脚本 环境变量 结果展示 英语转汉语 汉语转英语 总结 昨天看到一篇关于Linux下的桌面词典的文章,于是就想实现一个Wind ...

  5. Core Python Programming一书中关于深浅拷贝的错误

    该书关于深浅拷贝的论述: 6.20. *Copying Python Objects and Shallow and Deep Copies "when shallow copies are ...

  6. 剑指Offer——小米+小红书笔试题+知识点总结

    剑指Offer--小米+小红书笔试题+知识点总结 情景回顾 时间:2016.9.23 19:00-21:00 2016.9.24 15:00-17:00 地点:山东省网络环境智能计算技术重点实验室 事 ...

  7. 关于GCJ02和WGS84坐标系的一点实验

    大家都知道,在兲朝的电子地图的坐标都是经过了一个坐标偏移,叫GCJ_02的东西.在网上发现了将WGS84经纬度转成GCJ02的一个代码,写了个小程序测试了下看看全国各地的偏移量有多大. 关于WGS84 ...

  8. Centos7安装RocketMQ及配置测试

    环境 Centos7 RocketMQ 3.2.6 安装位置 /usr/local/alibaba-rockermq 外网ip 182.254.145.66 内网ip 10.105.23.114 安装 ...

  9. 如何自动增加和从代码读取Xcode项目的版本号

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Xcode项目和版本号相关的有2个地方Version和Buil ...

  10. 安卓banner图片轮播

    之前写过一篇关于首页图片广告轮播的demo:http://blog.csdn.net/baiyuliang2013/article/details/45740091,不过图片轮播的指示器(小白点)处操 ...