现在的位置: 首页 > 综合 > 正文

Query技巧总结

2014年03月17日 ⁄ 综合 ⁄ 共 28868字 ⁄ 字号 评论关闭

jquery

关键字: js

Query技巧总结
 

它具有如下一些特点:
1、代码简练、语义易懂、学习快速、文档丰富。
2、jQuery是一个轻量级的脚本,其代码非常小巧,最新版的JavaScript包只有20K左右。
3、jQuery支持CSS1-CSS3,以及基本的xPath。
4、jQuery是跨浏览器的,它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。
5、可以很容易的为jQuery扩展其他功能。
6、能将JS代码和HTML代码完全分离,便于代码和维护和修改。
7、插件丰富,除了jQuery本身带有的一些特效外,可以通过插件实现更多功能,如表单验证、tab导航、拖放效果、表格排序、DataGrid,树形菜单、图像特效以及ajax上传等。

jQuery的设计会改变你写JavaScript代码的方式,降低你学习使用JS操作网页的复杂度,提高网页JS开发效率,无论对于js初学者还是资深专家,jQuery都将是您的首选。
jQuery适合于设计师、开发者以及那些还好者,同样适合用于商业开发,可以说jQuery适合任何JavaScript应用的地方,可用于不同的Web应用程序中。
官方站点:http://jquery.com/  中文站点:http://jquery.org.cn/ 

 
、语法总结和注意事项

1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
$("#msg").html();
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;

3、如何获取jQuery集合的某一项
对于获取的元素集合,获取其中的某一项(通过索引指定)可以使用eqget(n)方法或者索引号获取,要注意,eq返回的是jquery对象,而get(n)和索引返回的是dom元素对象。对于jquery对象只能使用jquery的方法,而dom对象只能使用dom的方法,如要获取第三个<div>元素的内容。有如下两种方法:
$("div").eq(2).html();              //调用jquery对象的方法
$("div").get(2).innerHTML;       //调用dom的方法属性

4、同一函数实现set和get
Jquery中的很多方法都是如此,主要包括如下几个:
$("#msg").html();              //返回id为msg的元素节点的html内容。
$("#msg").html("<b>new content</b>");       
//将“<b>new content</b>” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content

$("#msg").text();              //返回id为msg的元素节点的文本内容。
$("#msg").text("<b>new content</b>");       
//将“<b>new content</b>” 作为普通文本串写入id为msg的元素节点内容中,页面显示<b>new content</b>

$("#msg").height();              //返回id为msg的元素的高度
$("#msg").height("300");       //将id为msg的元素的高度设为300
$("#msg").width();              //返回id为msg的元素的宽度
$("#msg").width("300");       //将id为msg的元素的宽度设为300

$("input").val(");       //返回表单输入框的value值
$("input").val("test");       //将表单输入框的value值设为test

$("#msg").click();       //触发id为msg的元素的单击事件
$("#msg").click(fn);       //为id为msg的元素单击事件添加函数
同样blur,focus,select,submit事件都可以有着两种调用方法

5、集合处理功能
对于jquery返回的集合内容无需我们自己循环遍历并对每个对象分别做处理,jquery已经为我们提供的很方便的方法进行集合的处理。
包括两种形式:
$("p").each(function(i){this.style.color=['#f00','#0f0','#00f'][i]})       
//为索引分别为0,1,2的p元素分别设定不同的字体颜色。

$("tr").each(function(i){this.style.backgroundColor=['#ccc','#fff'][i%2]})       
//实现表格的隔行换色效果

$("p").click(function(){alert($(this).html())})              
//为每个p元素增加了click事件,单击某个p元素则弹出其内容

6、扩展我们需要的功能
$.extend({
       min: function(a, b){return a < b?a:b; },
       max: function(a, b){return a > b?a:b; }
});       //为jquery扩展了min,max两个方法
使用扩展的方法(通过“$.方法名”调用):
alert("a=10,b=20,max="+$.max(10,20)+",min="+$.min(10,20));

7、支持方法的连写
所谓连写,即可以对一个jquery对象连续调用各种不同的方法。
例如:
$("p").click(function(){alert($(this).html())})
.mouseover(function(){alert('mouse over event')})
.each(function(i){this.style.color=['#f00','#0f0','#00f'][i]});

8、操作元素的样式
主要包括以下几种方式:
$("#msg").css("background");              //返回元素的背景颜色
$("#msg").css("background","#ccc")       //设定元素背景为灰色
$("#msg").height(300); $("#msg").width("200");       //设定宽高
$("#msg").css({ color: "red", background: "blue" });//以名值对的形式设定样式
$("#msg").addClass("select");       //为元素增加名称为select的class
$("#msg").removeClass("select");       //删除元素名称为select的class
$("#msg").toggleClass("select");       //如果存在(不存在)就删除(添加)名称为select的class

9、完善的事件处理功能
Jquery已经为我们提供了各种事件处理方法,我们无需在html元素上直接写事件,而可以直接为通过jquery获取的对象添加事件。
如:
$("#msg").click(function(){alert("good")})       //为元素添加了单击事件
$("p").click(function(i){this.style.color=['#f00','#0f0','#00f'][i]})
//为三个不同的p元素单击事件分别设定不同的处理
jQuery中几个自定义的事件:
(1)hover(fn1,fn2):一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。
//当鼠标放在表格的某行上时将class置为over,离开时置为out。
$("tr").hover(function(){
$(this).addClass("over");
},
       function(){
       $(this).addClass("out");
});
(2)ready(fn):当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
$(document).ready(function(){alert("Load Success")})
//页面加载完毕提示“Load Success”,不同于onload事件,onload需要页面内容加载完毕(图片等),而ready只要页面html代码下载完毕即触发。与$(fn)等价
(3)toggle(evenFn,oddFn): 每次点击时切换要调用的函数。如果点击了一个匹配的元素,则触发指定的第一个函数,当再次点击同一元素时,则触发指定的第二个函数。随后的每次点击都重复对这两个函数的轮番调用。
       //每次点击时轮换添加和删除名为selected的class。
       $("p").toggle(function(){
              $(this).addClass("selected");   
       },function(){
              $(this).removeClass("selected");
       });
(4)trigger(eventtype): 在每一个匹配的元素上触发某类事件。
例如:
       $("p").trigger("click");              //触发所有p元素的click事件
(5)bind(eventtype,fn),unbind(eventtype): 事件的绑定与反绑定
从每一个匹配的元素中(添加)删除绑定的事件。
例如:
$("p").bind("click", function(){alert($(this).text());});       //为每个p元素添加单击事件
$("p").unbind();       //删除所有p元素上的所有事件
$("p").unbind("click")       //删除所有p元素上的单击事件

10、几个实用特效功能
其中toggle()和slidetoggle()方法提供了状态切换功能。
如toggle()方法包括了hide()和show()方法。
slideToggle()方法包括了slideDown()和slideUp方法。

11、几个有用的jQuery方法
$.browser.浏览器类型:检测浏览器类型。有效参数:safari, opera, msie, mozilla。如检测是否ie:$.browser.isie,是ie浏览器则返回true。
$.each(obj, fn):通用的迭代函数。可用于近似地迭代对象和数组(代替循环)。

$.each( [0,1,2], function(i, n){ alert( "Item #" + i + ": " + n ); });
等价于:
var tempArr=[0,1,2];
for(var i=0;i<tempArr.length;i++){
       alert("Item #"+i+": "+tempArr[i]);
}
也可以处理json数据,如
$.each( { name: "John", lang: "JS" }, function(i, n){ alert( "Name: " + i + ", Value: " + n ); });
结果为:
Name:name, Value:John
Name:lang, Value:JS
$.extend(target,prop1,propN):用一个或多个其他对象来扩展一个对象,返回这个被扩展的对象。这是jquery实现的继承方式。
如:
$.extend(settings, options);       
//合并settings和options,并将合并结果返回settings中,相当于options继承setting并将继承结果保存在setting中。
var settings = $.extend({}, defaults, options);
//合并defaults和options,并将合并结果返回到setting中而不覆盖default内容。
可以有多个参数(合并多项并返回)
$.map(array, fn):数组映射。把一个数组中的项目(处理转换后)保存到到另一个新数组中,并返回生成的新数组。
如:
var tempArr=$.map( [0,1,2], function(i){ return i + 4; });
tempArr内容为:[4,5,6]
var tempArr=$.map( [0,1,2], function(i){ return i > 0 ? i + 1 : null; });
tempArr内容为:[2,3]
$.merge(arr1,arr2):合并两个数组并删除其中重复的项目。
如:$.merge( [0,1,2], [2,3,4] )       //返回[0,1,2,3,4]
$.trim(str):删除字符串两端的空白字符。
如:$.trim("  hello, how are you?   ");        //返回"hello,how are you? "

12、解决自定义方法或其他类库与jQuery的冲突
很多时候我们自己定义了$(id)方法来获取一个元素,或者其他的一些js类库如prototype也都定义了$方法,如果同时把这些内容放在一起就会引起变量方法定义冲突,Jquery对此专门提供了方法用于解决此问题。
使用jquery中的jQuery.noConflict();方法即可把变量$的控制权让渡给第一个实现它的那个库或之前自定义的$方法。之后应用Jquery的时候只要将所有的$换成jQuery即可,如原来引用对象方法$("#msg")改为jQuery("#msg")。
如:
jQuery.noConflict();
// 开始使用jQuery
jQuery("div   p").hide();
// 使用其他库的 $()
$("content").style.display = 'none';

2009-01-18

DWR中文文档

关键字: dwr中文文档

DWR api

dwr.xml文件的结构如下:
术语
这里是一些必须理解的术语 - 参数会被converted,远程Bean会被created。所以如果你有一个叫A的bean,它有一个方法叫A.blah(B) 那么你需要一个A的creator和一个B的converter。
一:<allow>
allow段落里面定义的试DWR可以创建和转换的类。
二:Creators
dwr.xml文件中的create元素的结构如下:
<allow> <create creator="..." javascript="..." scope="..."> <param name="..." value="..."/> <auth method="..." role="..."/> <exclude method="..."/> <include method="..."/> </create> ...</allow> 这里的多数元素都是可选的 - 你真正必须知道的是指定一个creator和一个javascript名字。
creator属性 是必须的 - 它用来指定使用那种创造器。
默认情况下DWR1.1有8种创造器。它们是:
new: 用Java的new关键字创造对象。
none: 它不创建对象,看下面的原因。 (v1.1+)
scripted: 通过BSF使用脚本语言创建对象,例如BeanShell或Groovy。
spring: 通过Spring框架访问Bean。
jsf: 使用JSF的Bean。 (v1.1+)
struts: 使用Struts的FormBean。 (v1.1+)
pageflow: 访问Beehive或Weblogic的PageFlow。 (v1.1+)
如果你需要写自己的创造器,你必须在init部分注册它。
javascript属性 用于指定浏览器中这个被创造出来的对象的名字。你不能使用Javascript的关键字。
scope属性 非常类似servlet规范中的scope。它允许你指定这个bean在什么生命范围。选项有"application", "session", "request" 和"page"。这些值对于Servlet和JSP开发者来说应该相当熟悉了。
scope属性是可选的。默认是"page"。如果要使用"session"需要cookies。当前的DWR不支持ULR重写。
param元素 被用来指定创造器的其他参数,每种构造器各有不同。例如,"new"创造器需要知道要创建的对象类型是什么。每一个创造器的参数在各自的文档中能找到。请查看上面的链接。
include和exclude元素 允许创造器来限制类中方法的访问。一个创造器必须指定include列表或exclude列表之一。如果是include列表则暗示默认的访问策略是"拒绝";如果是exclude列表则暗示默认的访问策略是"允许"。
例如要拒绝防范除了setWibble()以外的所有方法,你应该把如下内容添加到dwr.xml中。
<create creator="new" javascript="Fred"> <param name="class" value="com.example.Fred"/> <include method="setWibble"/></create> 对于加入到create元素中的类的所有方法都是默认可见的。
auth元素 允许你指定一个J2EE的角色作为将来的访问控制检查:
<create creator="new" javascript="Fred"> <param name="class" value="com.example.Fred"/> <auth method="setWibble" role="admin"/></create>
--------------------------------------------------------------------------------
new创造器在DWR中已经默认声明了:<creator id="new" class="uk.ltd.getahead.dwr.create.NewCreator"/> 。你不需要在dwr.xml文件中添加这段话,它已经存在于DWR的内部dwr.xml文件中了。
这个创造器通过类默认的够早函数创造对象实例。用new创造器有一些好处:
安全:DWR创造的对象生存的事件越短,多次调用中间的值不一致的错误机会越少。
内存消耗低:如果你的站点用户量非常大,这个创造器可以减少VM的内存溢出。
你可以通过下面的方式使用new创造器来创造远程调用Bean:
<allow> <create creator="new" javascript="Blah"> <param name="class" value="java.util.Date"/> </create> ... </allow> 这些代码把 java.util.Date 映射成Javascript,并且命名为Blah,所以在Javascript中当你调用Blah.toString(reply) 那么一个新的 java.util.Date 就会通过默认的构造函数创造出来, 然后 toString() 方法被调用,然后结果数据返回给reply方法(在这个例子中date是字符串格式)。
none'创造器不创建任何对象 - 它会假设你不需要创建对象。这有可能是对的,有两个原因。
你可能在使用的scope不是"page"(看上面),并在在前面已经把这个对象创建到这个scope中了,这时你就不需要再创建对象了。
还有一种情况是要调用的方法是静态的,这时也不需要创建对象。DWR会在调用创建器之前先检查一下这个方法是不是静态的。
对于上诉两种情况,你仍然需要class参数,用来告诉DWR它是在操作的对象类型是什么。
scripted创造器在DWR中已经默认声明了:<creator id="script" class="uk.ltd.getahead.dwr.create.ScriptedCreator"/>
这个创造器用BSF来执行脚本得到Bean,例如:
<allow> ... <create creator="script" javascript="EmailValidator"> <param name="language" value="beanshell"/> <param name="script"> import org.apache.commons.validator.EmailValidator; return EmailValidator.getInstance(); </param> </create> ...</allow> script创造器有如下参数:
参数 DWR版本 描述
language 1.0 脚本语言,字符串,例如'beanshell'. (必需)
script 1.0 要执行的脚本。 (必需,除非scriptPath参数存在)
scriptPath 1.1 脚本文件路径。 (必需,除非script参数存在)
reloadable 1.1 是否检测脚本文件的改动,以重新加载 (可选, 默认true)
class 1.0 创造出对象的类型(可选). 如果没有DWR通过创造器得到类型。
需要了解的主题
要使用这个创造器,你需要把一些辅助库放到WEB-INF/lib文件夹下:BSF的jar包,你要用的脚本语言的jar包。
当一个类是用script创造出来的,并且scope是session或application,如果你的脚本改变,session中的类和script中的类就不一致了。这样会出现错误。虽然web容器不用重启,但是用户需要先登出(或以某种方式清空session),然后再登录。
当clazz参数不为空,并且用来创造新实例,DWR简单的调用 class.newInstance() 方法。这种方法是没问题的,除非脚本正在用某个参数创建一个类,或者调用某个函数来配置这个类。不幸的是,每次请求都要重新运行script并造成上面的问题。
创造器
让DWR和Spring一起工作的步骤
确认你用的是最新版的DWR。Spring创造器已经有了变化,所以你最好检查一下DWR的最新版本。
确认你查看过开始指南中的内容。
确认你的Spring的Bean在DWR外面运行良好。
配置DWR和Spring一起工作。 (看下面)
查看演示页面: http://localhost:8080/[ YOUR-WEBAPP ]/dwr ,检查spring的Bean是否出现。
DWR对于Spring没有运行期依赖,所以如果你不使用Spring那么Spring的支持不会产生任何影响到。
The SpringCreator
这个创造器会查找spring的中配置的Bean,用Spring去创建它们。如果你已经在使用Spring,那么这个创造器会非常有用。
你可以通过下面的方式来创建远程调用的Bean:
<allow> ... <create creator="spring" javascript="Fred"> <param name="beanName" value="Shiela"/> </create> </allow> 寻找你的Spring配置
有三种方式寻找配置文件:
ContextLoaderListener
最简单的方式是使用org.springframework.web.context.ContextLoaderListener。你不必使用所有的Spring-MVC功能,只需要这个Listener就够了,所以这是个不错的方案。你需要在WEB-INF/web.xml中做如下配置:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/beans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> 我能找到的ContextLoaderListener的最好的文档就是javadoc。如果你知道还有更好的文档,请告知我。
Rob Sanheim 指出还有一个能深入了解ContextLoaderListener的文档。
使用location*参数
如果你要在dwr.xml中指定使用哪些bean,你可以使用location*参数。你可以指定任意多个文件,只要参数以location开始并且唯一即可。例如:location-1, location-2。这些location被用做Spring的ClassPathXmlApplicationContext的参数:
<allow> ... <create creator="spring" javascript="Fred"> <param name="beanName" value="Shiela"/> <param name="location" value="beans.xml"/> </create> </allow> 直接设置BeanFactory
SpringCreator有一个静态方法 setOverrideBeanFactory(BeanFactory) 用来通过编程的方式直接设置BeanFactory。
配置DWR和Spring
Bram Smeets写了一个有意思的blog,教你配置DWR使用beans.xml代替WEB-INF/web.xml。
我也对于如何在beans.xml中指定dwr.xml很感兴趣,尽管这看上去有些Spring传染病的感觉。有人知道如何实现吗?请加入邮件列表并告诉大家。

--------------------------------------------------------------------------------
三:Converters
我们必须保证所有的参数都可以被转换。JDK中的多数类型已经有转换器了,但是你需要给DWR转换你的代码的权利。一般来说JavaBean的参数需要一个<convert ...>定义。默认情况下,如下类型不需要定义就可以转换:所有的原生类型 boolean,int,double, 等等
原生类型的对象类型 Boolean,Integer,等等
java.lang.String
java.util.Date 和SQL中的Date
以上类型组成的数组
以上类型的集合类型 (Lists, Sets, Maps, Iterators, 等)
从DOM, XOM, JDOM 和 DOM4J中的DOM对象 (类似 Element 和 Document)
基础的转换器
原生类型,String,像BigDecimal这样的简单对象的转换器已经有了。你不需要在dwr.xml中<allow>部分的<convert>中定义。它们默认支持。
默认支持的类型包括: boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger, java.math.BigDecimal 和 java.lang.String
Date转换器
Date转换器负责在Javascript的Date类型与Java中的Date类型(java.util.Date, java.sql.Date, java.sql.Times or java.sql.Timestamp)之间进行转换。同基础的转换器一样,DateConverter默认是支持的。
如果你有一个Javascript的字符串 (例如"01 Jan 2010") ,你想把它转换成Java的Date类型有两个办法:在javascript中用Date.parse()把它解析成Date类型,然后用DWR的DateConverter传递给服务器;或者把它作为字符串传递给Server,再用Java中的SimpleDateFormat(或者类似的)来解析。
四:<init>
可选的init部分用来声明创造bean的类和转换bean的类。多数情况下你不需要用到他们。如果你需要定义一个新的Creator [JavaDoc] 和 Converter [JavaDoc] ,那么你就需要在这里定义他们。但是建议你现检查一下DWR是不是已经支持了。
在init部分里有了定义只是告诉DWR这些扩展类的存在,给出了如何使用的信息。这时他们还没有被使用。这中方式很像Java中的import语句。多数类需要在使用前先import一下,但是只有import语句并不表明这个类已经被使用了。每一个creator和converter都用id属性,以便后面使用。
五:多个dwr.xml文件
可以有多个dwr.xml文件(详细信息见web.xml文档)。每个文件中的定义会被加在一起。DWR用这个功能来加载基础配置文件。我们可以看看标准被配置文件来了解dwr.xml的内容。

Bean Converter
<convert converter="bean" match="your.full.package.BeanName"/>

指定属性转换只有针对bean才有效
<convert converter="bean" match="com.example.Fred"/>
  <param name="exclude" value="property1, property2"/>
</convert>

授权访问方式
<convert converter="bean" match="com.example.Fred"/>
  <param name="include" value="property1, property2"/>
</convert>

Maps和Collections converter
<convert converter="collection" match="java.util.Collection"/>
<convert converter="map" match="java.util.Map"/>

creator
Creator    Parameter    User   
new    class    类的全名称(包括包路径)   
scripted    language    BSF框架支持的脚本语言名称(BSF为apache项目)   
scripted    script    返回远程对象的脚本,脚本可以指定一些属性,多数情况下一般只设置param节点配置.属性很少设置.   
spring    Location*    任何以location开头的参数,每个参数都是指定一个spring的配置文件,在参数没有设置的情况下DWR会去读取spring的全局的配置文件.   
spring    beanName    从配置文件中读取的bean的名称   
           
           
           
fan访问权限           
           
如果要设置除了setWibble方法之外的所有方法都不可访问可以采用下面的设置.
<create creator="new" javascript="Fred">
  <param name="class" value="com.example.Fred"/>
  <exclude method="setWibble"/>
</create>
如果采用j2ee访问角色控制的模式
<create creator="new" javascript="Fred">
  <param name="class" value="com.example.Fred"/>
  <auth method="setWibble" role="admin"/>
</create>

DWR的引擎文件,他承担着把后台自动生成的javascript接口与前台调用之间的衔接责任
<script type='text/javascript'
    src='/[YOUR-WEB-APP]/dwr/engine.js'>
</script>

Java组件的编写和发布以及客户端引用
Java组件必须是一个具体类(因为接口、抽象类反射机制无法实例化)
实体类必须遵循Java Bean规范即实现Getter和Setter
配置文件中Allow部分的Create元素的JavaScript属性的值要唯一
如果存在Java Bean需要转换则要配置Allow部分的Convert元素
客户端引用业务组件要以dwr/interface/xxx.js的路径引用JS文件

DWR前台引擎(Engine.js)的主要职责:
截取每个后台组件的请求实现客户端的统一入口
将用于组件调用的JS参数对象重新包装组合
检测客户端浏览器的环境并选择最佳的数据提交方案
处理后台执行结果并通过执行回调函数通知客户

后台控制器(DWRServet)的主要职责
装载Servlet时初始化DWR配置参数
实现后台业务组件调用的服务器端统一入口
分发各种不同类型的请求 JS文件请求 业务调用请求等
输出组件执行结果(JavaScript语句)到客户端浏览器

业务组件执行器的主要职责
根据配置文件的参数确定后台组件的访问规则和生命周期
拆包前台传入的参数 包装组件执行结果
按参数类型匹配数据类型转换器
采用反射机制执行业务组件方法处理客户端请求
处理与其他系统的接口和协作 如:Spring Hibernate等

dwr.xml的业务组件发布和调用规则配置部分Allow
Create配置元素详细说明:
属性:
Creator 
配置业务组件的创建类型。主要有四种:Spring、New、 none 、Scripts。
JavaScript
前台页面javascript引用此组件的名称。名称需要唯一。
scope
组件的作用范围或则叫做生命周期。这个和Servlet的生命周期的作用是 一样的。共Session、request、application、page四个选项。
子节点:
Param 
配置业务组件的创建参数。Name属性设置名称,value属性设置业务组件的具体路径(类全名称)。
Include
授权方式保护业务组件方法的可见性。属性method可以访问的方法名称。如果没有配置则默认为所有方法都可以访问。
exclude
排除方式保护业务组件方法的可见性。属性method设置不可以访问的方法名称。除此之外的都可以访问。如果有需要控制业务组件方法的访问权限时建议采用这种方式。
Auth
采用EJB的角色访问控制方式。Method属性设置可以访问的方法名称,role属性设置访问角色。

Convert配置元素详细说明:
属性:
converter 
配置数据类型的转换器。一般是设置bean转换器,因为基本类型的转换器DWR默认设置。
match
设置要使用此转换器的java实体对象。如:
<convert converter="bean" match="demo.entity.*"/>
子节点:
Param对象属性的转换规则,name属性设置规则有include和exclude选项,作用和组件方法控制的一样。Value属性设置实体对象的属性。默认是所有属性都进行转换。

dwr.xml的业务组件方法签名配置部分Signatures
Signatures是用来配置Java Bean数据类型转换时遇到不能确定转换类型的情况。如:
Bean.setList(List a)方法,DWR设置集合a的时候就无法确定a这个集合里需要填充哪种数据类型。所以针对有输入集合对象的情况就需额外设置Signatures配置节点来设置。这个节点的配置如下:
<signatures>
  <![CDATA[
    import java.util.List;
    import demo.entity.*;
    import demo.busi.*;
   
    Customer.setAccounts(List<Account> accounts);
    DemoBusinessObject.getListSet(List<Contact> inList);
   ]]>
</signatures>

Signatures主要有两个部分:

Import部分 和java文件的作用一样

另一部分对方法的签名进行范型的设定。返回结果的集合元素类型不需要设置,因为可以在运行时确定。

JS开发注意事项
1、要注意DWR异步机制带来的数据可能不同步问题
2、返回结果只能是一个值所以要详细设计返回结果类型
3、要注意Java引用传递和JavaScript值传递的差异
4、连续多次后台请求尽量采用批量调用
5、尽量将JavaScript的逻辑处理代码抽取成一个独立的文件

  • dwr.jar (490.6 KB)
  • 下载次数: 763
2008-12-03

ext api chm

关键字: ext chm

chm 中文,英文都有呵呵
2008-10-05

linux 常用命令

关键字: linux 常用命令 chm

  su
  su命令是最基本的命令之一,常用于不同用户间切换。例如,如果登录为 user1,要切换为user2,只要用如下命令:
  $su user2
  然后系统提示输入user2口令,输入正确的口令之后就可以切换到user2。完成之后就可以用exit命令返回到user1。
  su命令的常见用法是变成根用户或超级用户。如果发出不带用户名的su命令 ,则系统提示输入根口令,输入之后则可切换为根用户。
  如果登录为根用户,则可以用su命令成为系统上任何用户而不需要口令。
  
  pwd
  pwd命令也是最常用最基本的命令之一,用于显示用户当前所在的目录。
  
  cd
  cd命令不仅显示当前状态,还改变当前状态,它的用发跟dos下的cd命令基本一致。
  cd ..可进入上一层目录
  cd -可进入上一个进入的目录
  cd ~可进入用户的home目录
  
  ls
  ls命令跟dos下的dir命令一样,用于显示当前目录的内容。
  如果想取得详细的信息,可用ls -l命令, 这样就可以显示目录内容的详细信息。
  如果目录下的文件太多,用一屏显示不了,可以用ls -l |more分屏显示 。
  
  find
  find命令用于查找文件。这个命令可以按文件名、建立或修改日期、所有者(通常是建立文件的用户)、文件长度或文件类型进行搜索。
  find命令的基本结构如下:
  $find
  其中指定从哪个目录开始搜索。指定搜索条件。表示找到文件怎么处理。一般来说,要用-print动作,显示 整个文件路径和名称。如果没有这个动作,则find命令进行所要搜索而不显示结果,等于白费劲。
  例如,要搜索系统上所有名称为ye的文件,可用如下命令:
  $find / -name ye -print
  这样就可以显示出系统上所有名称为ye的文件。
  
  tar
  tar最初用于建立磁带备份系统,目前广泛用于建立文件发布档案。可用如下方法建立tar档案:
  $tar cvf
  例如,如果要将当前目录中所有文件存档到ye.tar中,可用如下命令:
  $tar cvf ye.tar *.*
  要浏览档案内容,将c选项变成t。如果要浏览ye.tar档案中的内容,可用如下命令:
  $tar tvf ye.tar
  要取出档案内的内容,将c选项变成x。如果要将ye.tar档案中的内容取到当前目录中,可用如下命令:
  $tar xvf ye.tar
  
  gzip
  gzip命令用于压缩文件。 例如,如果要将ye.txt文件压缩,可用如下命令:
  $gzip ye.txt
  这样就可以压缩文件并在文件名后面加上gz扩展名,变成文件ye.txt.gz。
  解压缩文件可用gzip -d命令实现:
  $gzip -d ye.txt.gz
  这样就可以解压缩文件并删除gz扩展名。除此之外还可以用gunzip命令来解 压缩文件,效果跟用gzip -d命令一样。
  旧版的tar命令不压缩档案,可用gzip压缩。例如:
  $tar cvf ye.tar *.txt
  $gzip ye.tar
  则可建立压缩档案ye.tar.gz。
  新版的tar可以直接访问和建立gzip压缩的tar档案,只要在tar命令中加上z 选项就可以了。例如:
  $tar czvf ye.tar *.txt
  生成压缩档案ye.tar.gz,
  $tar tzvf ye.tar *.txt
  显示压缩档案ye.tar.gz的内容,而
  $tar xzvf ye.tar *.txt
  取出压缩档案ye.tar.gz的内容。
  
  mkdir
  这个命令很简单,跟dos的md命令用法几乎一样,用于建立目录。
  
  cp
  cp命令用于复制文件或目录。
  cp命令可以一次复制多个文件,例如:
  $cp *.txt *.doc *.bak /home
  将当前目录中扩展名为txt、doc和bak的文件全部复制到/home目录中。
  如果要复制整个目录及其所有子目录,可以用cp -R命令。
  
  rm
  rm命令用于删除文件或目录。
  rm命令会强制删除文件,如果想要在删除时提示确认,可用rm -i命令。
  如果要删除目录,可用rm -r命令。rm -r命令在删除目录时,每删除一个文件或目录都会显示提示,如果目录太大,响应每个提示是不现实的。这时可以用 rm -rf命令来强制删除目录,这样即使用了-i标志也当无效处理。
  
  mv
  mv命令用于移动文件和更名文件。例如:
  $mv ye.txt /home
  将当前目录下的ye.txt文件移动到/home目录下,
  $mv ye.txt ye1.txt
  将ye.txt文件改名为ye1.txt。
  类似于跟cp命令,mv命令也可以一次移动多个文件,在此不再赘叙。
  
  reboot
  重启命令,不必多说。
  
  halt
  关机命令,不必多说。
2008-09-10

sql chm api

关键字: sql chm api

sql chm api
spring2.0   jstl  hibernate3 ibats javaooad
javascrip chm html css 幫助文檔
2008-08-02

JSTL

关键字: jstl api

EL表达式
     注:在一个jsp中一定要注意
         <%@ page isELIgnored="true|false" %>
    1,可以访问一个简单的参数
         userName是一个参数
         ${userName}
    2, 访问一个嵌套的参数
         ${userBean.userName}
    3, 可以是一个表达式
         ${userBean.age>0}
         ${userBean.age>20 && userBean.age<10}
    4, 隐含对象
       1) pageContext    jsp页面的上下文,它提供了访问以下对象的方法
          a, Servlet Context,Servlet的上下文信息
          b, Session 客户端的session对象
          c, request
          d, response
       2) param  把请求中的参数名和单个值进行映射
       3) paramValues  把请求中的参数名和一个array值进行映射
       4) cookie  把请求中的cookie名和单个值进行映射

    表达式编程举例:

       <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      <%@ page contentType="text/html;charset:gb2312" language="java" %>
      <jsp:useBean id="user" class="com.iss.ch1.TestBean" scope="request">
      <jsp:setProperty name="user" property="*" />
      </jsp:useBean>
      <html>
      <head><title>表达式语言举例</title>
      </head>
      <body>
         姓名:${user.userName}<br>
         密码:${user.password}<br>
         年龄:${user.age}<br>
       <hr>
         姓名:${param.userName}<br>
         密码:${param.password}<br>
         年龄:${param.age}<br>
       <hr>
          姓名:${param['userName']}<br>
         密码:${param['password']}<br>
         年龄:${param['age']}<br>
       <hr>

  标准标签库(JSTL)
    JSTL包含了和以下操作相关的标签
     常用标签  <c:out> ,<c:set>
     条件标签  <c:if>, <c:choose>  <c:when> <c:otherwise>
     url标签  <c;import>
     xml标签  <xml:out>
     国际化输出标签  <fmt:timeZone>
     SQL标签 : <sql:query>

   1, 一般标签;
       <c:out>   <c:set>  <c:remove>   <c:catch>

       1) 把计算的结果输出
         a <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>
         b  <c:out value="value" [escapeXml="{true|false}"]>  body      </c:out>
           
           <c:out value="test"/>  //输出"test"
           <c:out value="test2'>itese  </c:out>   //中的body中的内容不会发送到客户端
           <c:out value="${test}"/>
           <c:out value="${notex}" default="如果notex变量不存在,则将显示此信息"/>
       2) 用来将某范围(request,session,application等)中设置某个值
         a, <c:set value="value" var="varName" [scope="{page|request|session|application}"]>
         b, <c:set var="varname" [scope="{page....}"]>    body  </c:set>
         c, <c:set value="value" target="target" property="propertyname"/>
         d, <c:set target="target" property="propertyname">  body </c:set>
           如:<c:set value="admin" var="username"/>
                <c:out value="${username}"/>

              <c:set var="password">
                 pass
              </c:set>
              <c:set value="100" var="maxUser" scope="application"/>
             <jsp:useBean id="user" scope="request" class="com.iss.ch1.test"/>
             <c:set value="admin" target="${user}" property="userName"/>
              <c:set target="${user}" property="password">
                  test
              </c:set>
            
       3) 用于删除某个变量或者属性
           <c:remove var="varName" [scope="{page|request|session|application}"]/>
            如:
             <c:set value="20" var="max" scope="application"/>
             <c:remove var="max" scope="application"/>
      4) 捕获由嵌套在它里面的标签抛出的异常
          <c:catch [var="varName"]>  test </c:catch>
        例:
            <c:catch var="mytest">
             <%  int i=0;
                 int j=10/i;
              %>
            </c:catch>
            <c:out value="${mytest}"/>
            <c:out value="${mytest.message}"/>
            <c:out value="${mytest.cause}"/>
    2 条件标签 
        1) 用于进行条件判断,如果test属性为true,则就计算它的body
           a, <c:if test="test1" var="varName" [scope="{page|request|....}"] />
           b,  <c:if test="test1" var="varName" [scope="{page|request|....}"] >   body </c:if>
             test为表达式的条件
              例:  <jsp:useBean id="user" class="com.iss.ch1.test"/>
                   <c:set value="16" target="${user}" property="age"/>
                  <c:if test="${user.age<18}">
                     对不起,你的年龄过小
                  </c:if>
         2) <c:choose>  用于条件选择,它和<c:when>及<c:otherwise>一起使用
            注: 不能单独使用 

             就象是开关语句 swith 
               <c:choose>   </c:choose>

           <c:when test="条件">   也就是<c:choose>的分支
                 此语句一定要在<c:choose>的里面,并且一定要在<c:otherwise>之前
           </c:when>
            在<c:choose>中可以有0个或者多个<c:when>或<c:otherwise>
           <c:otherwise>    也就是最后的分支语句
              test   与开关语句中的最后选择
           </c:otherwise>
              
          如:
              <c:choose>
                <c:when test="${user.age<=18}">
                   <font color="blue">
                </c:when>
                <c:when test="${user.age<30 && user.age>18}">
                   <font color="red">
                </c:when>
                <c:otherwise>
                   <font color="green">
                </c:otherwise>
             </c:choose>
              你的年龄:<c:out value="${user.age}"/>

   3  迭代标签
      我们一般使用 Iterator 或Enumeration来进行迭代
        <c:forEach>  
        <c:forTokens>
        语法1 在Collection中迭代
         <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="stet"]>  
             body
         </c:forEach>
        语法2 迭代固定的次数
          <c:forEach [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="stet"]>  
             body
         </c:forEach> 
       例:
         <% Collection users=new ArrayList();
            for(int i=0;i<5;i++)
            {
              TestBean user=new TestBean();
              user.setUser("user");
              user.setAge("age");
              users.add(user);
             }
            session.setAttribute("usert",users);
           %>
           <c:forEach var="use" items="${usert}">
               <tr>
                  <td><c:out value="${use.user}" /></td>
                  <td><c:out value="${use.age}" /></td>
               </tr>
           </c:forEach>
  
   <c:forTokens>
        主要用于处理TokenString 的迭代,可以指定一个或者多个分隔符
        <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [begin="begin"] [end="end"] [step="step"]>
            body
        </c:forTokens>

         使用"|" 作为分隔符
           <c:forTokens var="tok" items="blue,red,green|yellow|pink,black|white" delims="|">
              <c:out value="${tok}"/>&copy;
           </c:forTokens>
         使用"|," 作为分隔符
           <c:forTokens var="tok" items="blue,red,green|yellow|pink,black|white" delims="|,">
              <c:out value="${tok}"/>&copy;
           </c:forTokens>
         
   URL 相关的标签
      就是页面导向,重定向,资源获得,参数传递等相关标签
        <c:import url="url" var="varname" scope="  "  charEnvoding="  ">   
           tstee <c:param > 
        </c:import >
        与<jsp:include file=""/>一样的功能
      
         <c:redirect url=" " >    重定向到另一个资源
          <c:param>  teewe
         </c:redirect>

        <c:redirect url="test.jsp">
           <c:param name="username" value="admin"/>
        </c:redirect>   重定向到test.jsp中同时带上相关参数

       注:在以上所有标签,在jsp中要定义标签:
        <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

   xml标签
      <x:parse>
      <x:out>
      <x:set>
     1) <x:parse>用于解释xml文档
        a, 解释由String 或reader对象产生的xml文档
         <x:parse xml="xmldocument"  {var="varName" [scope="scope"]|varDom="var" [scopeDom="scope"]} [systemid="systemid"] [filter="filter"/>
        b, 解释在Body中指定的xml文档
           <x:parse  {var="varName" [scope="scope"]|varDom="var" [scopeDom="scope"]} [systemid="systemid"] [filter="filter">
               body
            </x:parse>

         例如:
            <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
            <%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
            <%@ page contentType="text/html;charset:gb2312" language="java" %>
            <html><head><title>test</title></head>
            <body>
              <c:set var="xmltest">
                <a><b><c>test1</c></b><d>test2</d></a>
              </c:set>
             <x:parse var="myxml" xml="${xmltest}" />
              <x:out select="$myxml/a/b/c" />
              <x:out select="$myxml//d" />
             <x:parse var="mybook">
                <books>
                   <book id="1">
                     <name>java书</name>
                     <price>89</price>
                   </book>
                 </books>
             </x:parse>
             <x:out select="$mybook/books//name"/>
             <x:out select="$mybook//name"/>
              <x:out select="mybook/books/book/name"/>
             <x:out select ="mybook/books/book/price"/>

            <x:set var="test">
               <books>
                 <book id="01">
                    <name>jsp书</name>
                    <price>23</price>
                   <authors>
                      <author>
                         <name>teee</name>
                         <adder>ddddd</adder>
                      </author>
                    </authors>
                  </book>
               </books>
            </x:set>
            <x:parse var="txml" xml="${test}"/>
               <x:out select="txml/books/name"/>
           
   xml流程控制
   <x:if>
   <x:choose>
   <x:when>
   <x:otherwise>
   <x:forEach> 
             

   <%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>

<html>
<head>
  <title>实例</title>
</head>
<body bgcolor="#FFFFFF">
<h3>Parse / ForEach</h3>

<x:parse var="document">
  <GetAllBooks>
           <book id="1234">
<name>JSP应用</name>
<publisher>出版社</publisher>
<price>xxx</price>
<category>计算机</category>
<description>JSP书</description>
<authors>
           <author id="1">
              <name>asiapower</name>
              <address>address:xxxx1</address>
            </author>
            <author id="2">
              <name>hellking</name>
              <address>address:xxxx2</address>
            </author>
        </authors>
           </book>
     </GetAllBooks>       
</x:parse>

<x:forEach select="$document/GetAllBooks">
  -> <x:out select="."/>
  <br>
</x:forEach>

<hr/>

<x:forEach select="$document//book">
  ->
  <x:if select=".//author">
   <x:out select=".//author/name"/>
  </x:if>
  <br/>
</x:forEach>
<hr>

<x:forEach select="$document//book">
  ->
  <x:choose>
  <x:when select='$document//author[@id="2"]'>
   author id=2,<x:out select='$document//author[@id="2"]'/>
   </x:when>
   <x:otherwise>
      不是 id=2
   </x:otherwise>
  </x:choose>
  <br/>
</x:forEach>

</body>
</html>

SQL相关标签
  <sql:setDataSource>  用于设定数据源 ,还可以指其范围
    <sql:stDataSource [datasource="datasource"] url="jdbcurl" [driver="driverClassName"] user="username" password="password" var="varname" scope="">
例:
   <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<html>
<head>
  <title>sql datasource</title>
</head>
<body bgcolor="#FFFFFF">
创建普通的数据源:<br>
<sql:setDataSource
  var="example1"
  driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
  url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev"
  user="bn"
  password="bn"
/>
创建普通的数据源,把用户名和密码写在url中:<br>
<sql:setDataSource
  var="example2"
  driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
 

抱歉!评论已关闭.