JsJava官方中文博客

最优秀的Javascript类库解决方案和界面应用开发支撑框架!

十月 12 2008

JsJava发布2.2版本

Published by admin under 最新动态

      2008年10月12日,JsJava发布了2.2版本,该版本为实际应用的开发提供了更为深入的支持,不仅加入了页面分隔条组件框架,而且对DOM和事件的操作提供了更多的扩展,例如设置快捷键、获得按键二进码以及对应键盘文字,对字符串的操作也做了一定的扩充,并且根据开发人员的反馈以及JsJava团队自己测试,修改了一些隐藏性很好的Bug,这些都使用2.2版本的实用性进一步增强,成为了界面端开发的利器。

       1、JsJava2.2实现了一个页面分隔条组件的框架,之所为是框架而不是组件,那是因为通过该框架,可以衍生出一系列的分隔条组件,而不是提供一个特定的分隔条组件,这样的好处就是能够满足不同的产品或者项目开发的要求,当然我们也计划推出一系列已经定制好的分隔条组件,这些组件计划在3.0版本提供,希望大家持续关注。

       下面我们看一下这个页面分隔条组件的一个简单应用样例。

        效果:

     这是一个复合的分隔条实现,上面是一个向下分隔条,下面是一个组合分隔条,这些分隔条可以自由拖动,代码如下:

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
<script src=”jsjava-comp.js” mce_src=”jsjava-comp.js”></script>
<script>
  function loadSplit(){   
    var pane2=new HTMLSplitPane(HTMLSplitPane.VERTICAL_SPLIT,”updiv2″,”downdiv2″,”splitdiv2″);
    pane2.show();
    var pane3=new HTMLSplitPane(HTMLSplitPane.HORIZONTAL_SPLIT,”updiv3″,”downdiv3″,”splitdiv3″);
    pane3.show();
    var pane4=new HTMLSplitPane(HTMLSplitPane.VERTICAL_SPLIT,”updiv4″,”downdiv4″,”splitdiv4″);
    pane4.show();
  }
  EventUtils.addDomEvent(window,”load”,loadSplit,false);
  document.onmouseup=f;
  function f(){status=new Date()};
</script>
<body leftmargin=”0″ topmargin=”0″>
<table width=”50%” align=”center” border=”1″ cellpadding=”0″ cellspacing=”0″>
  <tr>
    <td id=”updiv2″ height=”100″>
       
    </td>
  </tr>
  <tr>
    <td id=”splitdiv2″>
      <div style=”height:3;width:100%;background-color:red”></div>
    </td>
  </tr>
  <tr>
    <td id=”downdiv2″ height=”100″>
       
    </td>
  </tr>
</table>
<br>
<table width=”50%” align=”center” border=”1″ cellpadding=”0″ cellspacing=”0″>
  <tr>
    <td id=”updiv3″>
<table width=”100%” height=”200″ align=”center” border=”1″ cellpadding=”0″ cellspacing=”0″>
  <tr>
    <td>
      <div id=”updiv4″ style=”height:100″>
         
      </div>
      <div id=”splitdiv4″>
        <div style=”height:3;width:100%;background-color:red”></div>
      </div>
      <div id=”downdiv4″ style=”height:100″>
               
      </div>
    </td>
  </tr>
</table>
    </td>
    <td width=”6″ id=”splitdiv3″>
      <div style=”height:220;width:6;background-color:red;s”></div>
    </td>
    <td id=”downdiv3″>
       
    </td>
  </tr>
</table>
</body>
</html>

      2、JsJava2.2对页面选择组件框架HTMLSelector进行了功能扩展,在原来的基础之上,增加了选择条目的上移和下移功能,并且提供了两个HTMLSelector之间的互操作,例如将一个Selector中选中的条目增加到另一个Selector之中,而且可以设定遇到相同的条目是否强制覆盖。

      下面举一个简单的例子来加以说明。

       效果:

         相信这个样例是许多开发人员都比较熟悉的场景,因为无论是产品研发或是项目开发,有许多地方都要处理这种两个selector之间的操作,例如将左边选中的加到右边,将右面的selector的条目进行顺序调整(例如政府中的职级等都是要严格调整顺序的)。下面我们看一下代码:

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
<script src=”jsjava-comp.js” mce_src=”jsjava-comp.js”></script>
<script>
var hs1;
var hs2;
window.onload=function(){
   hs1=new HTMLSelector(document.myForm.s1);
   hs2=new HTMLSelector(document.myForm.s2);
}
function f1(){
   hs1.addSelectedOptionsTo(hs2,true);
}
function f2(){
   hs2.removeSelectedOptions();
}
function f3(){
   hs2.removeAll();
}
function f4(){
   hs2.moveUp();
}
function f5(){
   hs2.moveDown();
}
</script>
<form name=”myForm”>
<table border=”0″>
<tr>
<td>
<select name=”s1″ multiple size=”10″>
  <option value=’1′>username</option>
  <option value=’2′>age</option>
  <option value=’3′>birthday</option>
  <option value=’5′>address</option>
  <option value=’6′>blood</option>
  <option value=’7′>hobby</option>
</select>
</td>
<td>
<input type=”button” value=”add” onclick=”f1()”><br>
<input type=”button” value=”remove” onclick=”f2()”><br>
<input type=”button” value=”clear” onclick=”f3()”><br>
<input type=”button” value=”move up” onclick=”f4()”><br>
<input type=”button” value=”move down” onclick=”f5()”>
</td>
<td>
<select name=”s2″ multiple size=”10″>
</select>
</td>
</tr>
</table>

      3、JsJava2.2实现了页面中快捷键的定义,可以定义与Ctrl、Shift、Alt的组合键事件定义,虽然说大家都知道或者通过搜索Google等查处如何定义快捷键,但是我们更进异步提供了标准的工具类,这样做是为了统一接口,而且JsJava一直都考虑了跨浏览器的支持。

      例如我们定义Ctrl+L快捷键执行我们的一个JS函数myfunc,可以这样方便的实现。

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
<script>
  function myfunc(){
    alert(”execute!”);
  }
  EventUtils.setCtrlMnemonic(document,”L”,”myfunc”,false);
</script>

       最后一个参数很重要,因为在IE和Firefox有许多快捷键是内置的,最后一个参数就是决定是否快捷键事件继续传播。如果只想执行自己的逻辑,那么false就可以。当然有些快捷键是程序所不能屏蔽的,就好比Windows系统中的Ctrl+Shift+Del键一样,系统不会让你的逻辑执行的一样。

        另外JaJava2.2对字符串的操作也提供了更进一步的支持,而且修改了Validator的一些验证逻辑,因为当初并没有意识到一些JS特殊的内在逻辑,例如在JS中空字符串被认为和数字零以及false是对等的,自然false和数字零也就是对等的,这样的内在逻辑使得在原来的版本中的某些判断在特殊场景下就变得不是非常准确,JsJava2.2版本针对此项进行了相应的判断修改,该版本已经将此完善。

         JsJava的类库是非常强大的,实践证明,它可以做为产品研发或者项目开发过程中,界面编程的基础类库或者框架,这不仅仅是因为JsJava自身的良好设计,更为重要的是它的许多类和逻辑都是来自于一线开发人员的亲身实践,进而总结、提升、标准化而来的,最后再说一句:“中国人一定要自强!”

Comments Off

三月 17 2008

JsJava2.1类库使用说明

Published by admin under 内容介绍

【来源:JsJava官方中文博客网站】  JsJava2.1是在JsJava2.0版本的基础之上发展而来,因此javascript自定义类的定义和实现方式保持了2.0的风格,但是由于2.0版本推出了一系列类库(包括jsjava.js、jsjava-ajax.js、jsjava-collections.js等) ,没有考虑文件本身的大小,也没有更好的考虑用户如何使用更为方便,例如JsJava.js包含了所有的类,该文件就比较大,然而对于某些工具类,例如BrowserUtils等除了jsjava.js外,没有包含在任何其它的类库之中,如果使用改类,要么直接引用jsjava.js,要么就要单独引入BrowserUtils.js文件,不是很方便。

  为了更符合广大JS编程人员的使用习惯,JsJava从2.1版本开始,除了推出jsjava.js的综合类库文件外,单独推出如下的一系列类库,下面分别予以说明:

类库名称 类库说明
jsjava.js 综合类库,包含了所有的类。
jsjava-core.js 核心类库,是其它类库运行平台和基础。
jsjava-anim.js 动画类库,专门用于网页帧式动画的制作。
jsjava-blog.js 博客类库,专门用于读取和解析博客的RSS内容。
jsjava-comp.js 组件类库,专门提供实际开发过程中需要的组件,例如图片轮循组件等。
jsjava-ajax.js AJAX类库,专门用于处理客户端的异步请求处理。
jsjava-info.js 信息类库,专门提供各国的地理、政治、机构等信息,例如中国的行政区划信息等。
jsjava-math.js 数学类库,专门提供用于中等数学和高等数学的类库,例如求高斯分布等等。
   

通过上面的类库说明,可以看出2.1版本仍然提供了包含所有类库的jsjava.js,但是并不建议直接使用,当然如果你本身开发的就是以JS为基础客户端程序,例如Tibco的GI,那么可以直接引用jsjava.js,当时对于一般的网站开发、OA系统开发、产品开发、项目开发等,则引用jsjava-core.js即可,需要额外的功能,例如需要数学计算功能,则再应用专用的类库即可。

  另外,这次JsJava2.1版本还将各类库进行了压缩,即去掉多余的空行、空格和注释,使得文件的体积进一步缩小,当然这不太易于开发人员学习和阅读,不过如果您想阅读或者学习类的代码,可以直接下载JsJava整个源码工程,里面是按包的结构存放各个类的,而且每个类文件都是标准类格式的,非常易于阅读和理解。

  如果有些开发人员不喜欢引用类库,而喜欢引用具体的类,那么也没有关系,如果你对JsJava中某些类的依赖关系比较清楚的话,可以这样去做,例如ArrayList依赖于AbstractList,AbstractList依赖于List,而List则依赖于Collection,所以引用的时候,要根据依赖依次引入。当然JsJava中有依赖的关系的类不多,所以单独引用也是可行的。

  另外,为了更加方便大家在实际产品和项目开发中合理的使用JsJava,下面提供一个JsJava在产品或项目代码工程中的目录规划,仅供参考:

  广大开发人员如果使用过程中发现了问题,希望您能够及时提出并提交给freeeob@gmail.com或者提交http://tracker.jsjava.com,如果您希望类库中增加其它的功能,或者您自己已经有某些方面的积累,希望可以以类库的形式共享给更多的开发人员,那么您可以提交给freeeob@gmail.com或者提交jsjava@gmail.com

No responses yet

三月 17 2008

JsJava发布2.1版本

Published by admin under 最新动态

【来源:JsJava官方中文博客网站

  2008年3月16日,JsJava团队发布了JsJava2.1版本,该版本在2.0的基础之上,增加了一些新的界面组件,并对DOM和事件方面进行进一步加强,而且增加了一系列的工具类,同时对原来版本中存在一些bug进行了修改,下面主要介绍一下2.1版的主要功能。

  1,JsJava2.1实现了相册功能,并封装为一个JS组件。

  这是为了满足目前对图片轮循的要求而封装的一个组件,完全面向对象风格,而且具有可插拔的优势,每张图片都可以自定义修饰方式,你自己可以增加新的效果修饰器。

<script>
    <script src=”jsjava-comp.js” mce_src=”jsjava-comp.js”></script>
<script>
    var album=new PhotoAlbum(”img”);
    album.setCustomRenderMethod(”myrender”);
    album.addRender(new PhotoRevealTransRender(”1.jpg”,2,13,”The first render label!”));
    album.addRender(new PhotoRevealTransRender(”2.jpg”,2,16,”The second render label!”));
    PhotoAlbum.registry(album);  ¼br>     function go(){           ¼br>         album.display(1,3000);
    }
    function myrender(obj){
        document.getElementById(”label”).innerHTML=obj;
    }
</script>
<img id=”img” src=”2.jpg” mce_src=”2.jpg” style=”filter:revealTrans(duration=2,transition=23)”><br>
<div id=”label”>Wel!</div>
<input type=”button” value=”run” onclick=”go()” > 

显示结果:(下图只是一张静态图片,看不到真正的效果,可以在自己的网站或者本机上测试一下,就知道实际的动态效果了,完全可以和各大网站的图片轮循效果相媲美,而且JS设计方面绝对超过那些大网站)

 

  2,JsJava2.1实现了HTML的selector组件。

  我们知道我们在操作select对象时,许多情况下感觉很麻烦,尤其是对select通过Option对象动态增加删除的时候,感觉操作比较烦琐,例如一般OA系统中的用户选择界面,涉及到多个select框和这些框之间的数据转移,如果自己来处理,虽然不是很难,但是很麻烦,为了解决该问题,JsJava从2.1版本开始推出了HTML的Select组件。

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
    <script src=”jsjava-comp.js” mce_src=”jsjava-comp.js”></script>
<script>
    window.onload=function(){
        var selector=new HTMLSelector(document.myForm,”mySelect”,true,null);
        var option=new Option(”The old first label”,”a”);
        selector.addOption(option);
        var option2=new Option(”The old second label”,”b”);
        selector.addOption(option2);
        var option3=new Option(”The new first label”,”c”);
        selector.insertOption(0,option3);
    };
</script>
<form name=”myForm”>
  <select name=”mySelect” multiple>
  ¼br>   </select>
</form>
显示结果:

  3,JsJava2.1实现了类似Swing中边框的Border组件。

  如下:

<style>
  .borderClass{width:200};
  .legendClass{font-size:12pt;};
</style>
<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
    <script src=”jsjava-comp.js” mce_src=”jsjava-comp.js”></script>
<script>
    var tb=new TitledBorder(”Welcome!”,”<div>Welcome to
Beijing!”,”borderClass”,”legendClass”,TitledBorder.CENTER_ALIGNMENT);
    var htmlStr=tb.toHTML();
    document.write(htmlStr);
</script>

显示结果为:

  4,JsJava2.1实现了一些常用的转换功能。

  目前实现了阿拉伯数字与中文大小写之间的转换。例如:

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
<script>
    document.write(ChinaConvertUtils.numberToChinese(”123.35″,true)+”<br>”);
    document.write(ChinaConvertUtils.numberToChinese(”3/5″,false));
</script>

显示结果为:

 

  5,JsJava2.1实现了对文件传的一些辅助操作。

  例如上传图片或者其它文件以前,提前计算文件的大小和尺寸等,这在实际的编程中非常重要,例如一般上传图片都会限制大小和尺寸,如果等图片上传完了才由服务器逻辑做出判断(Java、PHP、.NET等后台计算这种问题的能力很强),那么对于大型图片来说,就太得不偿失了,所以现在许多人都开始接收,在上传图片之前通过JS来提前判断图片的大小和尺寸,JsJava从版本2.1开始,提供专门的UploadFile类来提供相关的支持。

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
 <script>
    var uploadFile=new UploadFile();
    function upload(){
        var obj=document.getElementById(”attachment”);
        uploadFile.setFile(obj.value);
        var fileSize=uploadFile.getFileSize();
        alert(fileSize);
    }
</script>
<input id=”attachment” type=”file”><input type=”button” value=”upload” onclick=”upload()”>

  6,JsJava2.1实现一些表单中的常用操作。

  目前主要是实现了对checkbox和select的一些操作,例如计算checkbox组中被选中的值啊等等,这些操作虽然基本每个开发人员都会,但是由于每次都要编写类似的十几行代码,而且不同的程序员在代码质量和跨浏览器方面考虑的并不一样,所以JsJava提供专门的FormUtils类,对Form的一些常规操作给予支持。

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
<script>
    function check(){
        var values=FormUtils.getSelectedValues(document.forms[0],”b”);
        alert(values);
    }
</script>
<form>
  <select name=”b” multiple>
    <option value=”first”>first</option>
    <option value=”second”>second</option>
    <option value=”third”>third</option>
  </select>
  <br>
  <input type=”button” value=”click” onclick=”check()”/>
</form>

  7,JsJava2.1提供了一些与鼠标事件相关的操作。

  例如鼠标点击的实际位置、将某个区域移动到鼠标点击的位置等等,看上去感觉比较简单,但是实际上由于鼠标点击的区域,很可能处于某个滚动的页面,而且外面可能还有IFrame等窗体,另外某些DIV等区域也可能存在滚动条,因此鼠标实际点击位置的计算,并非想象的那么容易,经历过类似编程的,应该清楚这些问题都是最让人头疼的问题之一。为了解决这些实际的编程问题,JsJava提供了一系列方法来支持,这些方法目前位于EventUtils类中。

frame.html:
    ————————-
    <table width=”100%” height=”100%” border=”1″>
  <tr>
    <td height=”120″ bgcolor=”pink” colspan=”2″> </td>
  </tr>
  <tr>
    <td width=”120″> </td>
    <td><iframe src=”position.html” mce_src=”position.html” style=”height:100%;width:100%”></iframe></td>
  <tr>
</table>

position.html
————————-
<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
<script>
    document.onclick=f;
    function f(e){
        if(!e){
            e=window.event;
        }
        EventUtils.showFloatInPosition(e,document.getElementById(”d”));
    }
</script>
Click anywhere and the pink area will show in the click position
<div style=”width:1000;height:600″> </div>
<div id=”d” style=”position:absolute;top:0;left:0;width:60;height:36;background-color:pink”>
¼br> </div>

显示结果:

  8,JsJava2.1实现了对窗口的一些操作。

例如最大化某个窗口、将窗口移动到屏幕的某个位置等等,其中最大化和将窗体移动到屏幕中心位置,是比较常用的功能。

</script>
<script>
    var win=window.open(”about:blank”);
    WindowUtils.showInPosition(win,WindowUtils.TOP_RIGHT);  ¼br> </script>
上述代码的意思是:将弹出的空白窗口移动到屏幕的右上角。

  9,JsJava从2.1版本开始,逐渐增加一些顶级函数,以方便开发人员直接调用。

  当然这样的函数不会设置太多,否则多少会破坏整体的面向对象原则,当然顶级函数实际上默认属于window对象。目前提供的顶级函数,是通过表达式计算值的功能,类似JSP中的EL功能,当然ASP、PHP等中也有类似的东东。举例如下:

<script src=”jsjava-core.js” mce_src=”jsjava-core.js”></script>
<script>
    function User(){
        this.getJob=function(){
            return this.job;
        };
        this.setJob=function(job){
            this.job=job;
        };
    }

    function Job(){
        this.info=new HashMap();
        this.info.put(”name”,”Software Engineer”);
        this.info.put(”manager”,”John”);
        this.getSalary=function(){
            return this.salary;
        };
        this.setSalary=function(salary){
            this.salary=salary;
        };
        this.getInfo=function(){
            return this.info;
        };
    }

    var job=new Job();
    job.setSalary(”1000″);
    var user=new User();
    user.setJob(job);
    document.write(”manager:”+$obj(”user.job.info[’manager’]”)+”<br>”);
    var map=new HashMap();
    map.put(”tel”,”010-62316787″);
    document.write(”tel:”+$obj(”map[’tel’]”));
</script>

显示结果:

manager:John
tel:010-62316787

  除此之外,JsJava2.1解决了JsJava2.0中存在的一些bug,主要如下:

  • CursorUtils在单行文本输入框中使用没有效果的问题
  • 在使用DecimalFormat格式化数字时,会包找不到方法的错误
  • 使用字符串的toCharArray扩展方法,会出现变量未定义的错误
  • 在使用ColorUtils的toHexValueWithRGB方法时,会出现找不到类的错误
  • 使用ajax部分时如果没有定义返回方法将会报找不到对象的错误
  • 其它一些小的bug

  另外,JsJava2.1对一些函数的虽然和性能做了一定程度的优化,但是这次力度不大,不过这次的发布包对类库文件进行了空格压缩,文件体积小了,当然可读性就比较差了,不过大家可以直接下载源代码工程来阅读。

  JsJava开发团队的宗旨就是,从Javascript实际开发过程中总结问题,从中提炼解决办法并形成类库解决方案,以类库和组件的形式免费赠与大家。

  希望大家继续支持JsJava,欢迎您即时提出版本中存在问题,您也可以提出自己在实际开发过程中遇到的一些问题,当然也可以附上您的解决方案。

  附:JsJava一些资源:

  JsJava官方网站:http://www.jsjava.com
  JsJava官方中文博客:http://cnblog.jsjava.com
  JsJava团队Email:jsjava@gmail.com
  问题和解决方案可以Email:freeeob@gmail.com或者公布到http://tracker.jsjava.com

No responses yet

十月 30 2007

JsJava2.0官方发布包使用常见问题

Published by admin under 内容介绍

【来源:JsJava官方中文博客】 

  JsJava2.0是JsJava团队继1.0之后推出了一个全新版本,不仅极大丰富了原有的类库,对应用的开发,也提供了较好的支持,短短一个月的时间,官方上的下载量已经超过了350次,得到了web开发人员的认可。

  随着大家深入使用和我们自己的不断测试,我们也发现了一些存在于JsJava2.0版本中的一些bug,其中一些bug确实是属于我们的疏忽而造成的,因此而对您造成的损失我们深感抱歉!

  下面我们将JsJava2.0使用过程中,发现的问题及其解决方式贡献给大家,希望能更好的支持您的使用。

  1)在textarea中使用CursorUtils没有问题,但是在单行文本输入框中使用则会出现问题,主要原因是在CursorUtils的一些方法中使用了DocumentUtils类的isHTMLTextObject方法,该方法中有一处代码逻辑错误。解决方式是自己手工修改jsjava.js中的该错误,如下:将
 if(tagName!=”TEXTAREA”&&tagName!=”INPUT”||tagName==”INPUT”&&elemObj.type.toUpperCase()!=”text”){
  return false;
 } 
中的”text”修改为”TEXT”。

  2)在使用DecimalFormat格式化数字时,会包找不到方法的错误,该错误主要来源于jsjava.js中DecimalFormat和NumberFormat类的顺序不正确造成的,因为DecimalFormat继承自NumberFormat,因此NumberFormat的定义应该放到前面,但是目前正好相反。解决方式为:
在JsJava.js中找到NumberFormat和DecimalFormat的定义,然后将两者的位置调换一下即可,或者您可以在下载包中找到Format.js、NumberFormat.js和DecimalFormat.js,然后在引用jsjava.js的页面中在jsjava.js的引用后面依次加入对这三个文件的引用。

  3)使用字符串的toCharArray扩展方法,会出现变量未定义的错误,主要原因是使用了一个未定义的变量,这是一个低级的程序bug,解决方式为:在jsjava.js中找到toCharArray方法,将其中的if(str==undefined){修改为if(this==undefined){ 。

  4)在使用ColorUtils的toHexValueWithRGB方法时,会出现找不到类的错误,主要原因是该方法中引用了一个1.0中存在但是2.0中已经不再使用的类,解决方式为:在jsjava.js中找到该方法,将其中的:
 var flag1=NumberScaleValidator.validateBetween(redValue,0,255);
 var flag2=NumberScaleValidator.validateBetween(greenValue,0,255);
 var flag3=NumberScaleValidator.validateBetween(blueValue,0,255);
替换为:
 var flag1=ValidatorUtils.isShortInRange(redValue,0,255);
 var flag2=ValidatorUtils.isShortInRange(greenValue,0,255);
 var flag3=ValidatorUtils.isShortInRange(blueValue,0,255);

  5)JsJava2.0中对一些功能的实现,使用了IE或者Firefox中的特殊功能,需要安全权限的允许才可以,例如附件上传前获取文件的一些属性等等,这些只能通过调用IE和Firefox的安全接口才能够实现,就好像大家经常使用的IE的Excel导出功能,是需要IE的安全允许的。

  我们先将这些遇到的问题和解决方式呈现给大家,希望大家继续提出宝贵的意见和建议,有任何想法和建议可以给我们来信,我们的email地址为:jsjava@gmail.com,另外对于提出的bug和需求等,可以提交到问题跟踪系统:http://tracker.jsjava.com

  另外,如果您有自己写的一些比较优秀的Javascript类或者功能函数,也可以发送给我们,我们会从中精选出适合放到jsjava工程之中部分,并注明您的姓名(英文字符)和email,当然您将代码提交给我们的前提,是您已经阅读并遵守GPL2许可证的内容和条款,并同意我们对其做一定加工和修改。

  谢谢中国区广大web开发人员对JsJava的支持,我们也将会为中国区用户提供更多的服务和支持。

No responses yet

九月 25 2007

Javascript对数组的操作

Published by admin under 应用样例/案例

【来源:JsJava官方中文博客】 

  Javascript自身提供了一些操作,可以对数组实现一定的处理,例如排序、连接、堆栈等等,下面做一下简单的介绍。

 1,concat(arrayName2, arrayName3, …, arrayNameN) ,将数组本身和另外一个或多个数组进行连接,例如:
    var arr1=[”a”,”c”];
    var arr2=[”b”,”d”];
    var arr22=[”e”,”f”];
    var arr3=arr1.concat(arr2,arr22);
   document.write(arr3);//结果显示为:a,c,b,d,e,f

  2,join(separator),通过间隔符将数字连接为字符串,例如:
    var arr1=[”a”,”b”,”c”,”d”,”e”];
    var arr1Str=arr1.join(”-”);
    document.write(arr1Str);//结果显示为:a-b-c-d-e

 3,pop()/push(element1, …, elementN) ,实现了堆栈的操作,push是入栈,pop是出栈,例如:
    var arr1=[”a”,”b”];
    arr1.push(”c”,”d”);
    document.write(arr1);//结果为:a,b,c,d
    var value=arr1.pop();
    document.write(value);//结果为:d

  4,reverse() ,将数组反向排序,例如:
   var arr1=[”a”,”b”,”c”];
    arr1.reverse();
    document.write(arr1);//结果为:c,b,a

  5,sort(compareFunction),按照指定的排序规则进行排序,如果参数为空,则按照默认的字母和数字进行排序,例如:
    function mySort(o1,o2){
        if(o1.length>o2){
            return 1;
        }
        return -1;
    }
    var arr1=[”a”,”c”,”bd”];
    arr1.sort();
    document.write(arr1);//结果为:a,bd,c
    arr1.sort(mySort);
    document.write(arr1);//结果为:bd,c,a

  6,shift() /unshift,将数组的第一个值取出(或者将值插入到数组第一个位置),并且数组长度缩短(加长),例如:
    var arr1=[”a”,”b”,”c”];
    var value=arr1.shift();
    document.write(value);//输出为:a
    document.write(arr1);//输出为:b,c
    var value2=arr1.unshift(”g”);
    document.write(value);//IE输出为undefined,Firefox输出为3
    document.write(arr1);//输出为:g,b,c

  7,slice(begin[,end]) ,类似字符串的substring方法,就是截取数组,例如:
    var arr1=[”a”,”b”,”c”];
    var arr2=arr1.slice(0,2);
    document.write(arr2);//输出为:a,b

  8,splice(index, howMany, [element1][, …, elementN]) ,从指定的位置(index)开始,删除后面多个(howMany)数组的值,并从删除处开始依次插入新的值,例如:
    var arr1=[”a”,”b”,”c”];
    arr1.splice(1,1,”m”,”n”,”o”);
    document.write(arr1);//输出为:a,m,n,o,c

  应该说,Javascript本身对数组提供的操作能力,还是不错的,但是在实际应用中,我们需要对数组做更多的操作,例如Java、PHP、.NET中对数组都提供了强大的操作能力,而且许多优秀的开源项目中,也提供了对数组的许多操作,但是Javascript这方面还需要进一步加强。

  为了对数组提供更多的操作,JsJava定义了许多类,来加强对数组的操作,介绍如下:

  1,jsjava.util.Arrays类,仿照Java的Arrays类,对数组提供了一些高效的操作,例如:
  var list=Arrays.asList([”a”,”b”,”c”]);//通过数组创建一个不可变的列表
  而且通过binarySearch,提供了二分法搜索的一个实现,其它的请参考JsJavaDoc

  2,jsorg.apache.commons.lang.ArrayUtils类,该类的实现是参考Apache优秀的commons-lang开源项目实现的,实现其中的所有功能,例如对数组进行插入、删除、搜索、填充、截取等等,例如:
    var arr=ArrayUtils.clone([0,1,2,9,0]);
    document.write(arr+”<br>”);
    document.write(ArrayUtils.subarray(arr,0,3)+”<br>”);
    arr.reverse();
    document.write(arr);
    显示结果为:
    0,1,2,9,0
    0,1,2
    0,9,2,1,0

  3,jsorg.eob.lang.MultiDimensionArrayUtils类,该类实现了对多维数组的创建支持,例如可以方便创建二维和三维数组,具体可以参考文章《在Javascript之中如何创建多维数组

  4,org.apache.commons.math.linear.RealMatrixImpl类,实现对矩阵的操作,矩阵实际上就是多维数组,即实现了对多维数组的支持,例如可以实现多维数组的加、减、乘、除等操作,还有数学运算中对矩阵的其它操作,具体可以参考JsJavaDoc

  JsJava是对Javascript语言最好的扩展和延伸,它与目前流行的prototype.js的方向是不一样的,如果你正在构建web应用,那么JsJava将是你界面应用最好的支撑。

7 responses so far

九月 24 2007

Javascript对日期的操作

Published by admin under 应用样例/案例

【来源:JsJava的官方中文博客网站】 

  对日期的操作,历来都是非常重要的,在Java、.NET和PHP等语言中,有许多标准的类和方法,例如在Java之中,就有Date、Calendar和GregorianCalendar等类,可以实现对日期和日历的许多操作,那么Javascript对日期的支持又如何呢?

  在Javascript之中,提供了标准的Date类,通过Date可以实现对日期的一些常规操作,例如,可以获得年、月、日、时、分、秒、毫秒等值,例如:

  var date=new Date();
  var year=date.getYear();
  var month=date.getMonth()+1;

  另外,通过Date也可以获取具有一定格式化的日期描述信息,例如通过toLoaleString、toLocaleDateString、toLocaleTimeString可以获得本地化的日期描述信息,例如:

  var date=new Date();
  var desc=date.toLocaleString();//返回值:2007年9月24日 0:11:14

  当然了,前面我们写过文章,专门讲述了JsJava中对日期格式化的支持。

  但是仅靠Javascript提供的一个Date对象,面对实际的web应用场景,多少还是有些应付不过来的,例如如何知道某个日期是这一个月的的几周,是本年的第几天等等,还有如何与中国的农历进行转换等等。

  为了解决Javascript中日期处理的这些问题,JsJava提供了几个专门的类,分别介绍如下:

  1,提供了jsjava.text.SimpleDateFormat类,通过该类,可以实现对日期对象的格式化,可以将一个日期对象,格式化为指定格式的字符串结果,这个在《如何使用Javascript格式化日期显示》一文中做过讲述。

  2,提供了jsjava.util.Calendar类和GregorianCalendar类,这与Java语言的Calendar和GregorianCalendar类一样强大,可以很容易的获得,今天是这一年的第几个月、第几周等信息,例如:

  var c = new GregorianCalendar();
  c.setTime(new Date(2007,2,8));
  document.write(c.getField(Calendar.DAY_OF_WEEK_IN_MONTH));//值为2
  document.write(c.getField(Calendar.WEEK_OF_YEAR));//值为10,即是这一年的第10周

  具体API可以查看JsJavaDoc

  3,提供了jsorg.eob.calendar.country.cn.ChinaLunarCalendar类,改类提供了对农历的操作,可以方便的公历日期转换为农历日期,可以获取农历中常用的天干、地支、生肖等等,例如:

  var c=new ChinaLunarCalendar();
  c.setTime(new Date(2005,5,6));
  document.write(“生肖:”+c.getDescOfShengXiao());//鸡
  document.write(“时辰:”+c.getDescOfHours());//子时

  具体API可以查看JsJavaDoc

  JsJava对日期的处理能力是非常强大的,熟练使用JsJava,给web应用开发带来的效率是显而易见的,欢迎大家学习使用。

One response so far

九月 23 2007

JsJava2.0发布包更新

Published by admin under 最新动态

【来源:JsJava官方中文博客网站】 

  2007年9月22日,JsJava团队对JsJava2.0发布包进行正式更新,并将原来的jsjava_2_0.zip拆分为四个包,分别介绍如下:

  1,all包,即jsjava_2_0_all.zip,包含JsJava的整个工程,这是一个eclipse工程。

  2,src包,即jsjava_2_0_src.zip,包含了JsJava的所有的Javascript类的源码。

  3,bin包,即jsjava_2_0_bin.zip,包含了JsJava所有的Javascript的lib包,例如JsJava-2.0.js等等,就是直接在web开发中使用的js文件。

  4,doc包,即jsjava_2_0_doc.zip,包含了JsJava的API文档和用户手册。

  建议如下:

  如果只是想在web开发中使用JsJava,那么只需下载bin包,里面包含了JsJava相关的Javascript类库,例如JsJava-2.0.js,这是包含了JsJava所有功能的综合类库,当然了还有一些其它的专用的类库,例如ajax类库、collection类库等等。

  如果想具体查看每一个类的实现,那么请下载src包,里面是按包结构存放的各Javascript类。

  如果想看JsJava API文档和用户手册,可以下载doc包,当然了这两部分,可以直接从JsJava官方网站 http://www.jsjava.com查看。

  如果想查看JsJava代码相关的所有部分,请直接下载all包,这是一个eclilpse工程目录,另外你可以直接通过cvs下载,cvs的匿名配置,请参考https://sourceforge.net/cvs/?group_id=171523.

  JsJava的功能是非常强大的,它来源于web开过过程中的一点一滴,但是以更合理的形式展现给web开发人员,无论你是J2EE开发人员,还是.NET的爱好者,或者是PHP的忠实粉丝,但是有一点是共有的,那就是web开发,尤其是Javascript的使用,那么走进JsJava的世界,它能让你的web开发走的更远。

2 responses so far

九月 22 2007

Javascript对字符串操作的支持

Published by admin under 应用样例/案例

【来源:JsJava官方中文博客网站

字符串操作历来是各种编程语言的基础功能之一,毕竟我们面对的各种各样的数据、对象等等,实际上都可以称之为信息,而信息更多的是以字符串的方式存储的,因此对字符串的操作就显得尤为重要了,我们都知道Perl有强大的字符串处理能力,Java、php、python等也都提供了字符串较为强大的支持,那么对于Javascript,它对字符串的处理能力又如何呢?

Javascript中对于字符串有标准的String对象来支持,String对象提供了一些对字符串的常规操作,例如charAt、substring、indexOf、fromCharCode等等,对于一般的处理来说,这些基本上也够用了,但是我们的web应用往往许多时候都是比较复杂,仅靠这些基本的字符串操作,感觉还是力不从心,不得不在这些基本操作的基础之上,编写大量的上层代码,以适应特地的解析要求。

既然如此,那么有没有更好的方式或方案来处理字符串呢?答案是有的,那就是选择JsJava。

JsJava可以说是最为优秀的Javascript类库解决方案,也是web应用开发界面端应用框架的首选,JsJava对于字符串的处理提供了非常强大的支持,下面就做一下简单的介绍。

1,提供了位于jsjava.lang包下的StringBuffer类,该类的功能就是对字符串进行各种增删改查的操作,提供的具体方法有:

void append(pvalue)
append a string after the current string
Object charAt(index)
return the char at specified index
void deleteBetween(index1,index2)
delete content from index1 to index2
void deleteCharAt(index)
delete a char at specified index
Object getChars()
return the chars array from the current string
Object getLength()
return the length of the current string
Object getValue()
return the current string
Object indexOf(str)
return the index of str in the current string
void insert(index,str)
insert a string in specified index
Object lastIndexOf(str)
return the last index of str in the current string
void reverse()
reverse the current string char sequence
Object substring(index)
return the substring from index
Object substringBetween(index1,index2)
return the substring from index1 to index2
Object toString()
return a string description

2,提供了位于jsjava.text包下的StringCharacterIterator类,该类的功能就是对字符串进行功能丰富的迭代器操作,提供的具体方法有:

Object current()
return the current char
Object first()
return the first char
Object getBeginIndex()
return the begin index from where the iterator start
Object getEndIndex()
return the end index where the iterator stop
Object getIndex()
return the current index
Object hasMore()
judge whether the iterator has more elements
Object last()
return the last char
Object next()
return the next char
Object previous()
return the previous char
void setIndex(index)
set the current index
void setText(text)
set the string

3,提供了位于jsorg.apache.commons.lang包下的StringUtils类,该类的功能就是对字符串进行功能丰富的操作,该类是非常强大的,例如可以将比较长的字符串缩短成指定长度的字符串,后面自动加上省略号,并提供的具体方法有:

<static> Object abbreviate(str,offset,maxWidth)
Abbreviates a String using ellipses.
<static> Object capitalize(str)
Capitalizes a String changing the first letter to title case.
<static> Object charLength(str)
Get the char length of the string.
<static> void isAlpha(str)
Checks if the String contains only unicode letters.
<static> void isAlphanumeric(str)
Checks if the String contains only unicode letters or digits.
<static> Object isAlphanumericSpace(str)
Checks if the String contains only unicode letters, digits or space (’ ‘).
<static> Object isAlphaSpace(str)
Checks if the String contains only unicode letters and space (’ ‘).
<static> Object isAsciiPrintable(str)
Checks if the string contains only ASCII printable characters.
<static> Object isBlank(str)
Checks if a String is whitespace, empty (”") or null.
<static> Object isEmpty(str)
Checks if a String is empty (”") or null.
<static> void isNotBlank(str)
Checks if a String is not empty (”"), not null and not whitespace only.
<static> void isNotEmpty(str)
Checks if a String is not empty (”") and not null.
<static> void isNumeric(str)
Checks if the String contains only unicode digits.
<static> void isNumericSpace(str)
Checks if the String contains only unicode digits or space (’ ‘).
<static> void isWhitespace(str)
Checks if the String contains only whitespace.
<static> Object joinArray(arr,separator)
Joins the elements of the provided array into a single String containing the provided list of elements.
<static> Object joinIterator(iterator,separator)
Joins the elements of the provided iterator into a single String containing the provided list of elements.
<static> Object joinList(list,separator)
Joins the elements of the provided list into a single String containing the provided list of elements.
<static> Object trim(str)
Removes control characters (char <= 32) from both ends of this String, handling null by returning null.

JsJava中对字符串操作的定义,汲取了Java、PHP语言本身以及重要开源项目中的实现,因此对应该开发提供了很好的支持,后续版本中,JsJava将进一步从web开发人员的实际运用出发,将开发过程中经常遇到的字符串解析问题进行整理,并进行标准的实现,也希望web开发的朋友们,提供使用场景和问题,下面是JsJava相关的一些资源:

JsJava官方网站:http://www.jsjava.com
JsJava官方中文网站:http://cn.jsjava.com
JsJava官方中文博客:http://cnblog.jsjava.com
JsJava团队Email:jsjava@gmail.com
JsJava开源工程的管理员Email:freeeob@gmail.com

2347 responses so far

九月 20 2007

JsJava2.0在jsp中报js错误,怎么解决?

Published by admin under 最新动态

【来源:JsJava官方中文博客】 

JsJava2.0发布后,许多web开发人员都进行了下载,在html页面中使用非常的出色,但是在jsp中使用时却发现了问题,加载过程中就出现了语法错误,大概错误如下图所示:
JsJava2.0错误信息

经过在UTF-8模式下查看jsjava-2.0.js文件,发现在EventUtils类处有八九行代码前面有一些特殊的字符,这些字符使得jsp引擎解析出现了问题。现在JsJava官方网站已经更新了JsJava2.0的发布包,请您重新下载,给您带来的不便,深感抱歉!

JsJava2.0下载地址:http://download.jsjava.com

2 responses so far

九月 18 2007

Javascript中如何操作剪贴板

Published by admin under 应用样例/案例

【来源:JsJava的官方中文博客网站

  也许你认为只有像Java、C++这样的语言,才能够操作系统的剪贴板,其实Javascript也可以对系统剪贴板进行操作,想想现在网上有那么多的在线编辑器,大都可以支持拷贝网页,就可以想到通过客户端技术也可以实现对剪贴板的操作。

  为了能够更加规范的通过Javascript支持系统剪贴板的操作,JsJava从2.0版本开始,创建了专门的Javascript对象,来实现对剪贴板的操作,主要是一个工具类,即jsorg.eob.document.ClipboardUtils,该类提供了两个静态方法,即将文本拷贝到剪贴板和从剪贴板获取数据。

  JsJava对剪贴板操作的实现,是经过IE和Firefox测试的,因此具有很好的通用性。下面就举一个具体的例子。

    <script>
    function getData(){
        var data=ClipboardUtils.getTextFromClipboard();
        t.value=data;
    }
    function setData(){
        var text=”这是需要拷贝的一段文本,这些文本将会被拷贝到系统的剪贴板之中。”;
        ClipboardUtils.copyTextToClipboard(text);
    }
    </script>
    <textarea id=”t” cols=”65″ rows=”15″></textarea><br>
    <input type=”button” value=”拷贝内容到剪贴板” onclick=”setData()”/>
    <input type=”button” value=”从剪贴板获取内容” onclick=”getData()”/>

  由上面可以看出,使用ClipboardUtils对系统剪贴板进行操作,是非常方便的,我们在网上看到的其它方法,要么不能兼容各种浏览器,要么就是有其它问题,JsJava对此进行了封装,形成了专门的类,为我们操作剪贴板带来了很大的方便。

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

  JsJava官方网站:http://www.jsjava.com
  JsJava官方中文网站:http://cn.jsjava.com
  JsJava官方中文博客:http://cnblog.jsjava.com
  JsJava团队Email:jsjava@gmail.com
  JsJava开源工程的管理员Email:freeeob@gmail.com

One response so far

Next »