js 加载过后正确地执行函数.

实例:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第2章(\代码\第02章) • sample01.htm 将JavaScript代码插入在<head>标签与</head>标签之间 • sample02.htm 将JavaScript代码放在了<body>标签与</body>标签之间 • sample03.htm JavaScript与HTML混合执行 • sample04.htm 在同一个网页中使用不同脚本语言 • sample05.htm 判断浏览器对JavaScript版本的支持情况 • sample06.htm 引用外部JavaScript • sample07.htm 在同一个HTML文档中多次引用外部脚本文件 • sample08.htm 使用外部脚本文件和嵌入的JavaScript代码 • sample09.htm 边加载边解析的JavaScript代码 • sample10.htm 先加载后解析的JavaScript代码 • sample11.htm 单行注释语句 • sample12.htm 多行注释语句 • sample13.htm 使用HTML注释语句隐藏JavaScript代码 • sample14.htm 提示用户浏览器不支持客户端脚本语言 • sample15.htm 直接执行的JavaScript代码 • sample16.htm 直接调用函数 • sample17.htm 使用“javascript:”语句调用函数或方法 • sample18.htm 通过事件调用JavaScript代码 • sample19.htm 一段错误的JavaScript代码(调试用) 第3章(\代码\第03章) • sample01.htm 转换成数字型 第4章(\代码\第04章) • sample01.htm 字符串直接量 • sample02.htm 使用转义字符 • sample03.htm 数组直接量的使用方法 • sample04.htm 数组直接量 • sample05.htm 函数直接量的使用方法 • sample06.htm 对象直接量 第5章(\代码\第05章) • sample01.htm 全局变量 • sample02.htm 在不同的语句块中使用全局变量 • sample03.htm 局部变量的使用方式 • sample04.htm 在函数体中定义全局变量 • sample05.htm 使用没有定义的变量 • sample06.htm 重复定义变量 • sample07.htm 引用未赋值的变量 • sample08.htm 变量的优先级 • sample09.htm 随处定义的变量 • sample10.htm 随处定义的变量 • sample11.htm 嵌套函数中变量的有效范围 • sample12.htm 变量没有语句块的限制 • sample13.htm 常量的使用 第6章(\代码\第06章) • sample01.htm 先使用后递增 • sample02.htm 先递增后使用 • sample03.htm 先使用后递减 • sample04.htm 先递减后使用 • sample05.htm 字符串运算符 • sample06.htm 逻辑与运算符 • sample07.htm 逗号运算符 • sample08.htm 使用delete运算符删除变量 • sample09.htm 使用delete运算符删除对象属性 • sample10.htm 删除对象 • sample11.htm 使用delete运算符删除数组元素 • sample12.htm in运算符在对象中的使用 • sample13.htm in运算符在数组中的使用 • sample14.htm instanceof运算符 • sample15.htm new运算符 • sample16.htm this运算符 • sample17.htm this运算符 • sample18.htm void运算符 第7章(\代码\第07章) • sample01.htm 单支选择的if语句 • sample02.htm if…else语句 • sample03.htm if…else if语句 • sample04.htm if…else if…else语句 • sample05.htm if语句的嵌套 • sample06.htm if语句的嵌套(多次嵌套) • sample07.htm switch语句 • sample08.htm switch语句(省略default语句) • sample09.htm switch语句(不能省略的break语句) • sample10.htm for语句 • sample11.htm 逗号运算符与for语句的结合使用 • sample12.htm while语句 • sample13.htm do…while语句 • sample14.htm do…while语句与while语句的区别 • sample15.htm 遍历对象属性和数组元素 • sample16.htm 使用for each…in语句遍历对象属性和数组元素 • sample17.htm 对象的引用 • sample18.htm with语句 • sample19.htm with语句的等价代码 • sample20.htm label语句 • sample21.htm break语句 • sample22.htm 在嵌套的循环语句中使用break语句 • sample23.htm label语句与break语句相结合 • sample24.htm continue语句 • sample25.htm label语句与continue语句相结合 • sample26.htm 抛出异常 • sample27.htm 捕捉异常(捕捉使用throw语句抛出的异常) • sample28.htm 捕捉异常(捕捉JavaScript产生的异常) • sample29.htm 抛出不同的异常 • sample30.htm 抛出不同的异常(多catch语句块) • sample31.htm finally语句 • sample32.htm 空语句 • sample33.htm return语句 第8章(\代码\第08章) • sample01.htm 使用对象直接量创建自定义对象 • sample02.htm 使用对象直接量创建有方法的自定义对象 • sample03.htm 使用自定义构造函数创建对象 • sample04.htm 使用带参数的构造函数创建对象 • sample05.htm 创建对象时传递不完整的参数 • sample06.htm 使用有缺省值的构造函数创建对象 • sample07.htm 使用带方法的构造函数创建对象 • sample08.htm 使用带方法的构造函数创建对象 • sample09.htm 遍历对象属性 • sample10.htm 遍历对象属性并获得属性值 • sample11.htm 遍历对象属性和方法 • sample12.htm 遍历对象属性和方法时进行判断 • sample13.htm 遍历对象属性值 • sample14.htm 索引对象属性 • sample15.htm 添加对象属性 • sample16.htm 删除对象属性 • sample17.htm 删除对象属性 • sample18.htm 将对象赋值给对象属性 • sample19.htm 将对象赋值给对象属性 • sample20.htm 添加方法 • sample21.htm 删除方法 • sample22.htm 引用原型对象 • sample23.htm 继承属性 • sample24.htm 设置继承的属性值 • sample25.htm 通过原型对象修改对象属性 • sample26.htm 通过原型对象添加对象属性 • sample27.htm 本地属性与继承属性 • sample28.htm 灵活定义属性值的方式 • sample29.htm 在构造函数中使用全局变量 • sample30.htm 在继承中使用全局变量 • sample31.htm 在继承中使用全局变量(一种解决办法) 第9章(\代码\第09章) • sample01.htm 布尔对象与布尔值 • sample02.htm 布尔值隐式转换为布尔对象 • sample03.htm 布尔值与布尔对象的区别 • sample04.htm 复制一个布尔对象 • sample05.htm 将日期对象的日期部分和时间部分转换成字符串 • sample06.htm 将日期部分转换为字符串 • sample07.htm 将时间部分转换为字符串 • sample08.htm 将时间部分转换为字符串 • sample09.htm 获取日期对象中日期部分 • sample10.htm 获取日期对象中时间部分 • sample11.htm 以毫秒表示法设置和返回日期对象的毫秒表示法 • sample12.htm 获得当前时间的毫秒表示 • sample13.htm 获得指定时间的毫秒表示 • sample14.htm 日期之差 • sample15.htm 求圆的面积 • sample16.htm 数字对象与数字 • sample17.htm 字符串长度 • sample18.htm 创建字符串 • sample19.htm 字符串与Unicode编码 • sample20.htm 返回字符串中的一个字符 • sample21.htm 通过字符串的起始位置和结束位置来获得子字符串 • sample22.htm slice()方法的使用 • sample23.htm substr()方法的使用 • sample24.htm 查找子字符串在字符串中的位置 • sample25.htm 统计一个字符串在另一个字符串中出现的次数 • sample26.htm 使用正则表达式搜索子字符串 • sample27.htm 替换使用字符串查找到的子字符串 • sample28.htm 扩展字符串的匹配方式 • sample29.htm 使用正则表达式匹配要替换的子字符串 • sample30.htm 更多的替换字符串 • sample31.htm 将字符串分割成数组 • sample32.htm 转换大小写 • sample33.htm 与HTML相关的方法 • sample34.htm 字符串比较 • sample35.htm 修改字符串中的某一个字符 • sample36.htm 创建Object对象 • sample37.htm 返回对象的构造函数 • sample38.htm 判断对象的类型 • sample39.htm 执行字符串中的JavaScript代码 • sample40.htm 判断对象属性是否为自有属性 • sample41.htm 判断一个对象是否是另一个对象的原型对象 • sample42.htm 判断对象的属性是否可以被枚举 • sample43.htm 监视属性值的变化情况 第10章(\代码\第10章) • sample01.htm 直接调用函数 • sample02.htm 将函数返回值赋值给对象属性 • sample03.htm 将函数的返回值作为数据在表达式中进行运算 • sample04.htm 直接将函数的返回值输出 • sample05.htm 通过事件调用函数 • sample06.htm 递归调用函数 • sample07.htm 递归调用函数(使用临时的函数名) • sample08.htm 传递参数的方法 • sample09.htm 传递参数个数多于函数定义的参数个数 • sample10.htm 传递参数个数少于函数定义的参数个数 • sample11.htm 传递参数个数少于函数定义的参数个数(使用默认值) • sample12.htm Arguments对象的使用方法 • sample13.htm Arguments对象的使用方法 • sample14.htm 实际传送的参数个数和参数值 • sample15.htm 定义不确定参数个数的函数 • sample16.htm 使用callee属性递归调用函数 • sample17.htm 判断参数个数是否正确 • sample18.htm 引用原型对象 • sample19.htm 查看构造函数名 • sample20.htm 判断函数调用情况 • sample21.htm 使用apply()方法将函数作为对象的方法调用 • sample22.htm 使用call()方法将函数作为对象的方法调用 • sample23.htm 函数的自定义属性 • sample24.htm 置换图片 • sample25.htm 检测一个值是否是非数字 • sample26.htm 转换成整数 • sample27.htm 转换成整数(使用不同进制) • sample28.htm 字符串编码与解码 • sample29.htm URI编码与解码 • sample30.htm URI组件编码与解码 第11章(\代码\第11章) • sample01.htm 创建空数组 • sample02.htm 创建数组的同时为数组元素赋值 • sample03.htm 创建指定长度的数组 • sample04.htm 将字符串分割成数组 • sample05.htm 数组元素的值 • sample06.htm 输出数组的所有元素 • sample07.htm 输出数组的所有元素(使用for循环) • sample08.htm 输出数组的所有元素(使用for each循环) • sample09.htm 数组长度 • sample10.htm 添加数组元素 • sample11.htm 通过为数组元素赋值的方法添加数组长度 • sample12.htm 删除数组元素的值 • sample13.htm 通过改变数组长度来添加和删除数组元素 • sample14.htm 创建二维数组 • sample15.htm 将数组转换成字符串 • sample16.htm 将数组转换成本地字符串 • sample17.htm 通过连接符将数组元素连接成字符串 • sample18.htm 将元素添加在数组尾部 • sample19.htm 截取数组中的一部分 • sample20.htm 从前向后查找元素在数组中的位置 • sample21.htm 查找值为5的元素 • sample22.htm 从后向前查找元素在数组中的位置 • sample23.htm 将数组中的元素颠倒排序 • sample24.htm 删除数组尾部元素 • sample25.htm 删除数组头部元素 • sample26.htm 在数组头部或尾部添加元素 • sample27.htm 在数组的任何位置添加数组元素 • sample28.htm 在数组的任何位置删除数组元素 • sample29.htm 替换数组中的元素 • sample30.htm 数组元素的排序 • sample31.htm 数组元素的排序(使用函数比较) • sample32.htm 颠倒数组中元素的次序 • sample33.htm 返回数组中大于50的元素(使用循环) • sample34.htm 返回数组中大于50的元素 • sample35.htm 查找数组中的元素 • sample36.htm 输出数组中的元素 • sample37.htm 判断数组中的元素是否都大于50 • sample38.htm 判断数组中的元素是否至少有一个大于50 • sample39.htm 返回数组中所有元素的平方值 • sample40.htm 返回数组中元素之和 • sample41.htm 返回数组中元素之和(加上初始值) • sample42.htm 返回数组中最大的元素 • sample43.htm 将二维数组转换成一维数组 • sample44.htm 返回数组中元素之和 • sample45.htm 两种不同的匹配方式 • sample46.htm 两种不同的匹配方式(使用g参数) • sample47.htm 返回用于创建数组的字符串 • sample48.htm 返回数组第1个元素出现的位置 第12章(\代码\第12章) • sample01.htm 客户端对象层次 • sample02.htm 通过name属性值引用对象 • sample03.htm 通过数组下标引用对象 • sample04.htm 在HTML标签中设置事件驱动 • sample05.htm 在JavaScript代码中设置事件驱动 • sample06.htm 调用内置对象的方法 • sample07.htm 直接调用JavaScript代码 • sample08.htm 调用用户函数 • sample09.htm 在超链接中使用事件(使用click事件) • sample10.htm 在超链接中使用事件(click事件的处理代码为跳转网页的语句) • sample11.htm 在超链接中使用事件(将click事件处理语句写在href属性值中) • sample12.htm 事件的返回值 • sample13.htm this运算符与参数传递 • sample14.htm 鼠标移动事件 • sample15.htm 鼠标点击事件 • sample16.htm 键盘事件 • sample17.htm 限制文本框中输入的字数 • sample18.htm 加载事件与卸载事件 • sample19.htm 得到焦点与失去焦点事件 • sample20.htm 提交事件与重置事件 • sample21.htm 选择事件与改变事件 第13章(\代码\第13章) • sample01.htm 警告框 • sample02.htm 确认框 • sample03.htm 提示框 • sample04.htm 状态栏的默认信息 • sample05.htm 状态栏的瞬间信息 • sample06.htm 打开一个空白窗口 • sample07.htm 打开一个有内容的窗口 • sample08.htm 在命名窗口中打开文档 • sample09.htm 设置新开窗口的特征 • sample10.htm 不显示新开窗口的浏览历史 • sample11.htm 窗口名称 • sample12.htm 关闭当前窗口 • sample13.htm 在打开的窗口中关闭窗口 • sample14.htm 关闭其他窗口 • sample15.htm 判断窗口是否已经关闭 • sample16.htm 对其他窗口的引用 • sample17.htm 窗口得到焦点 • sample18.htm 移动窗口 • sample19.htm 调整窗口大小 • sample20.htm 滚动文档 • sample21.htm 在状态栏显示时间 • sample22.htm 跑马灯 • sample23.htm 延时注册 • sample24.htm 计数器 • sample25.htm 框架页 • sample26.htm 内置框架 • sample27.htm 框架数量 • sample28.htm 对框架页的引用 • sample29.htm 通过框架名对框架页的引用 • sample30.htm 复杂的框架页 • sample31.htm 在框架中对其他窗口的引用 • sample32.htm 操作新开窗口中的数据 第14章(\代码\第14章) • sample01.htm 在网页上输出文字 • sample02.htm write()和wirteln()的区别 • sample03.htm 输出文字时的注意事项 • sample04.htm 在内置框架中输入文字 • sample05.htm 在内置框架中输入文字(document.open()方法的使用) • sample06.htm 测试代码 • sample07.htm 测试代码(注销document.close()语句) • sample08.htm 输出文档 • sample09.htm 不覆盖当前浏览历史记录 • sample10.htm 覆盖当前浏览历史记录 • sample11.htm 超链接颜色 • sample12.htm 网页的前景色和背景色 • sample13.htm 最后修改时间与文档URL • sample14.htm 跑马灯 • sample15.htm referrer属性的使用 • sample16.htm 文档所在域 • sample17.htm 图片信息 • sample18.htm 置换图片 • sample19.htm 置换图片(使用this引用) • sample20.htm 随机图片 • sample21.htm 随机图片(与load事件结合) • sample22.htm 提示图片不存在 • sample23.htm 查看超链接的各部分 • sample24.htm 随机广告 • sample25.htm Anchor对象和Link对象的区别 第15章(\代码\第15章) • sample01.htm Form对象的属性 • sample02.htm 验证表单数据 • sample03.htm 确认提交和重置数据 • sample04.htm 将表单提交到不同的URL • sample05.htm 限制文本框中的输入字数 • sample06.htm 自动选择文本框中的文字 • sample07.htm 自动定位在第一个文本框 • sample08.htm 只允许提交一次 • sample09.htm 改变按钮上的文字 • sample10.htm 获取单选框与复选框的值 • sample11.htm 限制复选框的被选择数量 • sample12.htm 全选或取消全选 • sample13.htm 使用下拉列表框提交表单 • sample14.htm 添加下拉列表框中的选项 • sample15.htm defaultSelected和selected的区别 • sample16.htm 选课 • sample17.htm 二级联动菜单 • sample18.htm 预览图片 • sample19.htm 下拉列表框中的选项排序 • sample20.htm 统计表单控件元素 第16章(\代码\第16章) • sample01.htm Screen对象的属性 • sample02.htm 满屏显示网页 • sample03.htm 判断浏览器是否支持Java • sample04.htm 浏览器的基本属性 • sample05.htm 显示浏览器的默认主页 • sample06.htm 查看浏览器支持的MIME类型 • sample07.htm 显示Flash • sample08.htm 跳转 • sample09.htm 加载和刷新文档 • sample10.htm 通过修改当前文档的URL来加载新文档 第17章(\代码\第17章) • sample01.htm 创建与读取Cookie • sample02.htm 读取Cookie • sample03.htm 精确读取Cookie值 • sample04.htm 精确读取Cookie值(使用数组) • sample05.htm 设置Cookie的有效期 • sample07.htm Cookie的域 • sample08.htm Cookie的安全性 • sample09.htm 为Cookie编码 • readCookie.htm 读取Cookie • cookie\sample06.htm Cookie的路径 第18章(\代码\第18章) • sample01.htm DOM • sample02.htm 节点的访问方法 • sample03.htm Node对象的常量 • sample04.htm Document接口的属性 • sample05.htm 访问文档中的特殊节点 • sample06.htm 查看某个元素出现的次数 • sample07.htm 查看特定节点是否存在 • sample08.htm 查看指定id值的节点下的子节点 • sample09.htm 节点的名称 • sample10.htm 获得一个节点下的所有子节点 • sample11.htm 子节点与兄弟节点 • sample12.htm 节点的值 • sample13.htm 插入一个节点 • sample14.htm 插入一个节点(添加一个Text节点) • sample15.htm 插入一个节点(删除原节点) • sample16.htm 复制节点 • sample17.htm 在一个节点前插入节点 • sample18.htm 删除节点 • sample19.htm 删除节点(使用删除了的节点) • sample20.htm 获取节点名称 • sample21.htm 获得节点的属性值 • sample22.htm 添加属性与删除属性 • sample23.htm 查看Element节点下的所有属性 • sample24.htm 获得节点的属性值 • sample25.htm 添加属性与删除属性 • sample26.htm 改变文字 • sample27.htm 移动文字 第19章(\代码\第19章) • sample01.htm 使用正则表达式替换字符串 • sample02.htm 简单地匹配字符串 • sample03.htm 匹配字符串和子字符串 • sample04.htm 引用匹配成功的字符串 • sample05.htm 全局匹配 • sample06.htm 测试匹配是否成功 • sample07.htm RegExp的静态属性 • sample08.htm 验证邮政编码 • sample09.htm 验证身份证号码 • sample10.htm 验证电话号码 • sample11.htm 验证URL • sample12.htm 验证Email • sample13.htm 使用正则表达式和DOM结合 第20章(\代码\第20章) • sample01.htm 创建一个XMLHttpRequest对象 • sample02.htm 用户注册 第21章(\代码\第21章) • sample01.htm 使用JavaScript实现二级联动菜单 • sample02.htm 将下拉列表框内置于Iframe中 • sample03.htm 在Iframe中获取服务器端数据 • sample04.htm 使用Ajax从服务器端获取数据 • sample05.htm 使用get方式提交数据 • sample06.htm 使用post方式提交数据 • sample07.htm 在Ajax中使用post方式提交数据 • sample08.htm 在服务器端获得HTTP请求头 • sample09.htm 在客户端获得HTTP响应头 • sample10.htm 获取文件信息 • sample11.htm 获取服务器时间 • sample12.htm 砍掉Ajax的缓存 • sample13.htm 异步方式显示文档信息 • sample14.htm 在Ajax中使用同步处理 • sample15.htm 在Ajax中使用同步处理(改良后) • sample16.htm 网页的编码 • sample17.htm 网页的编码 • sample18.htm 网页的编码 • sample19.htm 读取不同编码的文本文件 • sample20.htm 获取动态网页程序返回的内容 第22章(\代码\第22章) • sample01.xml 完整的XML文件代码 • sample02.xml 无效的XML文件 • sample03.xml 空标签 • sample04.xml 无效的XML文件 • sample05.xml 区分大小写 • sample06.xml XML的属性值 • sample07.xml 转义字符 • sample08.xml 注释 • sample09.xml CDATA标签 • sample10.htm 在IE浏览器中解析XML文件 • sample11.htm 在其他浏览器中解析XML文件 • sample12.htm 跨浏览器解析XML文件 • sample13.htm 在IE浏览器中解析XML字符串 • sample14.htm 在其他浏览器中解析XML字符串 • sample15.htm 跨浏览器解析XML字符串 • sample16.htm 创建解析XML文件的函数 • sample17.htm 创建解析XML字符串的函数 • sample18.htm 输出XML文档的信息 • sample19.htm 访问根节点 • sample20.htm 访问根节点下的所有子节点 • sample21.htm 定位到节点 • sample22.htm 输出节点与子孙节点的值 • sample23.htm 通过循环输出所有子节点信息 • sample24.htm 返回节点的属性值 • sample25.htm 访问属性节点 • sample26.htm 获得元素节点的所有属性节点 • sample27.htm 获得元素节点的所有属性节点(跨浏览器) • sample28.htm 通过标签名查找节点 • sample29.htm 通过标签ID值查找节点 • sample30.htm 修改节点的值 • sample31.htm 删除节点 • sample32.htm 创建与添加节点 • sample33.htm 将节点插入在指定节点之前 • sample34.htm 在文本节点和注释节点中添加数据 • sample35.htm 替换节点 • sample36.htm 替换节点值 • sample37.htm 删除节点值 • sample38.htm 复制节点 • sample39.htm 异步获取XML文件 • sample40.htm 处理从服务器上获取的XML文档 • sample41.htm 获取服务器中返回的XML文档 第23章(\代码\第23章) • sample01.htm 内联样式 • sample02.htm 内部样式 • sample03.htm 外部样式 • sample04.htm 注释 • sample05.htm 类选择符 • sample06.htm ID选择符 • sample07.htm 伪类 • sample08.htm 样式继承 • sample09.htm 样式层叠 • sample10.htm 样式冲突 • sample11.htm 使用CSS设计网页 • sample12.htm HTML、XML与CSS的结合使用 • sample13.htm HTML、XML与CSS的结合使用(改良后) • sample14.htm 修改文字大小 • sample15.htm 下拉菜单
DWR.xml配置文件说明书 1、 建立dwr.xml 配置文件 任何一个dwr.xml的文件都需要包含DWR DOCTYPE的声明行,格式如下: 整个配置文件的大体结构如下: ... 有几个术语有必要理解,参数叫做converted,远程Bean叫做created.如果远程Bean A有个方法A.blah(B),那么你需要为A建立一个created,为B建立一个converted. 配置文件init部分声明那些用于建立远程bean和在方法调用中转换bean的类.这部分是可选择性配置的,多数情况下可以不必使用它,如果你想定义一个新的creator或者converter那么就必须在部分中声明,but do double check on the ones that are currently available first. 在init部分的作用是告诉DWR一些类实例和关于这些类怎样运行的信息.实际上并不会使用.这有点向java中的import语句,多数类在使用之前需要引入,但引入了类并不意味着这些在使用,每个creator和converter需要有个id属性来允许以后进行引用. 配置文件的allow部分定义哪些类可以建立和转换,每个被准许的类都可以有一个'create'或者'convert'配置行.下面列出的类的转换在默认情况下不需要进一步的设置. 1、所有基本类型,boolean,int,double等等 2、基本类型的对象形式实现的类,Boolean,Integer等等 3、java.lang.String 4、java.util.date 和三个SQL形式的派生类 5、以上所有类型的数组形式 6、以上所有类型的集合,List,Set,Map(有些局限性) However nothing is added to the list of classes that can be created (i.e. put up for remoting) without you declaring it. 2、 The Converters DWR已经默认定义和初始化了常用的Converter,他们分别如下: 这里仅仅是定义了Converter并且简单的放在元素之内,任何的元素内容都有两个必须定义的属性.一个是对converter定义的引用和converter能够转换的类. 例如最简单的converter是null converter,它作用是把null和void值转换成javascript的null和undefined值.它是所有converter中最简单的,就象调用java的静态方法一样,所以并不需要创建对象. 默认的时候DWR将java void值转换成javascript的null值就是这样设置. 有时java.lang.Void也需要进行这样的转换,所以设置也是相似的.从java中传递null值到javascript是没有任何危险性的,所以DWR将这个作为默认的converter,所以你自己不用再把这个converter添加到配置文件的部分中去. 基本类型的converter转换int,boolean,double等.当然还包括对应的对象形式Integerv,Boolean等等.DWR中在allow预定义了16个配置项目分别用于所有基本类型的转换.就象这样. String类型和Date同样预先定义了Converter,这些converter都没有办法进行改变的,所有的String,Date和数值类型都统一采用默认的converter. 2.1 Array Converters Array的配置项目没有上面介绍的那么直观,默认情况下DWR装载所有的基本类型和可装载的对象,这些包括String,Date等先前介绍的类型.java高级程序员可能会理解为什么match的这行有点奇怪. *符号在上面没有提到,其实这是个可以表示任何字符的通配符号.这些数组可装载的的类型和其他可装载的类型是一样的. 2.2 Bean Converters 一种不能采用默认方式定义的converter就是Bean Converter,这个是将POJO对象转换成javascript相关的数组,反向也一样.基于安全因素的考虑这种类型的converter不能采用默认的方式实现. 假设有个bean并且通过语句设置成远程可用,有种类型的参数他本身是一个带有setter的java bean,但setter会产生严重的隐患.攻击者可能促使这隐患的发生.通过下面的语句就可以设置但个类的bean converter 要想允许转换指定包或子包下所有类的转换可以按照下面的设置 很明显,可以采用下面的方式来转换所有的java bean 2.3 Restricting Property Conversion(指定属性转换) 将象用exclude和incluce来通知DWR隔离creator的方法一样,converter也有一个类似的配置方法.因为指定属性转换只有针对bean才有效(基本类型的转换没有必要指定属性),这个功能只能应用与特定的converter即BeanConverter和从次类派生的所有类.相关配置语法如下 这样就可以限定DWR不能调用Fred对象的getProperty1()和getProperty2()方法,通常这被成为拒绝访问方式,当然你也可以采用下面的方式配置可以访问的方法(授权访问方式) 较好的安全控制大部分都是采用授权访问方式. 2.4 Collection Converters DWR最后两个默认的converter是Maps和Collections 通常converter是采用递归方法转换集合中的所有对象. 这里有两个地方需要注意: 仅仅通过反射方法没有办法知道集合元素中的类型,所以上面的两个converter能将任何集合转换成相对javascript而言有意义的对象.然而没有办法将不同的集合类类型分别采用不同的转换方法.因为没有办法完全自动进行转换,我们可以应用dwr.xml文件的special signatures syntax配置部分设置类型的转换处理过程. 2.5 DOM Objects DWR 自动将DOM、DOM4J、JDOM和XOM转换成DOM树,前面这几种类型都仅仅返回Document,Element,Node.DWR会自动将这些转换成浏览器DOM对象.通常在启动JDOM Converter时会有一个提示信息,除非你想采用JDOMconverter否则可以忽略. INFO: Missing classdef for converter 'jdom'. Failed to load uk.ltd.getahead.dwr.convert.JDOMConverter. Cause: org/jdom/Document 因为DWR没有办法知道你是否采用jdom converter,所以提示信息是info级别.如果你想采用jdom converter,你必须很清楚地知道jdom converter是否可以被加载.这就是DWR保留上面的提示信息的原因. 3 The Creators DWR共有三种Creator,最简单的”new”是调用bean的默认构造函数创建实例.”scripted”允许采用其他脚本语言创建实例.如BeanShell.在远程bean的默认构造函数不能进行进一步配置的情况下这种类型的creator比较有用.”Spring”类型允许你通过spring创建实例. 下面是关于creator的参考资料和配置参数说明. Creator Parameter User new class 类的全名称(包括包路径) scripted language BSF框架支持的脚本语言名称(BSF为apache项目) scripted script 返回远程对象的脚本,脚本可以指定一些属性,多数情况下一般只设置param节点配置.属性很少设置. spring Location* 任何以location开头的参数,每个参数都是指定一个spring的配置文件,在参数没有设置的情况下DWR会去读取spring的全局的配置文件. spring beanName 从配置文件中读取的bean的名称 “scope参数允许你配置creator的生命周期,共有以下几个选项:application,session,request,page.这些参数对于用过jsp或servlet的开发人员并不陌生. 3.1 Uing static methods 如果你想远程调用一个creator的静态方法,并且creator是new类型.因为调用远程bean的方法前DWR不会检测将要执行的方法是不是静态方法,如果是静态方法那么creator就不用创建.这种机制可以适用任何类型的creator,但new类型的creator是最简单配置的. 3.2 Security Creator可以配置类的成员函数的访问权限.creator有授权访问(指明可以被访问的方法)和拒绝访问(指明不允许访问的方法)两种配置方式. 如果要设置除了setWibble方法之外的所有方法都不可访问可以采用下面的设置. 如果采用j2ee访问角色控制的模式 3.3 The 'spring' Creator 3.4 The 'new' Creator DWR已经默认定义了new creator. DWR已经将这配置到了内置的dwr.xml文件中,并不需要进行额外的配置. Creator通过调用类的默认的构造方法创建实例.应用new creator有以下几个优点:  安全性 生命周期比较短的creator可以得到更好的安全性,通过不同的应用情况设置适合的生命周期.  低内存开销 在访问量比较大的情况下,可以不用担心发生内存泄露的情况. 配置一个creator的创建和远程方法调用设置: ... 上面的配置信息表示将java.util.date提供给客户端调用,并且引用名称是Blash.当你在客户端调用Blash.toString(reply)时,后台将采用java.util.date的默认构造方法创建一个实例.然后调用实例的tostring方法.客户端的javascript将返回给reply对象(此时reply是java.util.date的字符串形式) 3.5 The 'scripted' Creator DWR 已经默认配置了scripted creator配置, 这种类型的creator采用BSF执行脚本语言并返回bean.例如 ... import org.apache.commons.validator.EmailValidator; return EmailValidator.getInstance(); ... 4 Signatures in dwr.xml Signatures部分用于配置Collections中装载对象元素的类型.举个例子来说:下面的java代码没有办法对List集合中的对象进行转换. public class Check { public void setLotteryResults(List nos) { ... } } Singatures配置允许我们对DWR要操作的对象类型进行配置.对于了解JDK5泛型编程的开发人员来说下面的格式是很容易理解的. <![CDATA[ import java.util.List; import com.example.Check; Check.setLotteryResults(List nos); ]]> DWR有个专门用于解析上面配置语句的解析器,虽然上面的是JDK5中才有的特性,因为有解析器的原因这也可以应用与JDK5之前的版本. 解析规则是不可见的,但有两种例外情况. 一种情况是因为DWR1.0的解析器中有个Bug,在有些场合会无法处理返回值的类型.所以应该要避免这种情况的发生. 一种情况是因为解析器是一个语法宽松的解析器,他不象编译器一样对语法有非常严格的要求,所有有时可能一些重要的语句没有配置而无法事先发现. <![CDATA[ import java.util.List; Check.setLotteryResults(List); ]]> DWR的将来版本可能会采用符合java官方规范的解析器,这样可以避免许多出错的情况. Signature部分只用于泛型参数到基本类型参数的转换,对于其他的类型DWR采用反射机制或运行时类型来确定.在没有泛型参数的情况下可以不配置Signature. public void method(String p); public void method(String[] p); 下面的就需要配置,因为反射机制无法完成次类功能. public void method(List p); public void method(Map p); 下面可以不用配置,DWR可以自动完成转换. public void method(List p); public void method(Map p); 下面可以不用设置,DWR可以采用运行时转换. public List method(String p); 有一个值得注意的地方是在javascript中所有对象的keys都是一个字符串,你也可以把其他对象作为keys.他们在使用之前都会转换成字符串形式.DWR1.x将采用这个特性来转换成String.以后对象的转换将会在服务器端完成. 5 Scripting Introduction DWR生成的javascript代码和java代码很相似并通过dwr.xml配置输出.相比普通java异步调用之下,通过ajax生成远程接口和java 代码的最大挑战是AJAX异步功能. DWR通过引入一个回调函数,当数据从服务返回数据是调用这个函数。有两种推荐的方法使用回调函数。一在参数列表加入回调功能。二增加调用元数据对象调用。 也可以将回调的功能放在参数列表的前头,但是不建议使用这样的用法,因为在处理自动HTTP对象时候会出现问题。这些方法一般会保持向后兼容。 5.1 Simple Callback Functions 假设有个下面的java方法。 public class Remote { public String getData(int index) { ... } } 在javascript中就可以以下面的方式引用。 ... function handleGetData(str) { alert(str); } Remote.getData(42, handleGetData); “42”只是一个传给getdata方法的参数。当然你可以采用下面的写法。 Remote.getData(42, function(str) { alert(str); }); 5.2 Call Meta-Data Objects 另一种使用回调功能的方法是指定一个回调功能选项或其他可选项。上面的例子就变成下面的形式。 Remote.getData(42, { callback:function(str) { alert(str); } }); 这个方法具有以下几个优点:可以依照你的编码习惯来编写程序,更重要的是允许你增加额外的调用选项。 5.3 Timeouts and Handling Errors 除了使用回调功能你还可以指定超时时限和错误处理方法。例如: Remote.getData(42, { callback:function(str) { alert(str); }, timout:5000, errorHandler:function(message) { alert("Oops: " + message); } }); 5.4 Finding the callback method 下面有几个实例来说明回调功能各个参数选项的配置,因为javascript是不支持函数重载的。 Remote.method({ timeout:3 }, { errorHandler:somefunc }); 上面的两个参数一个是bean的参数一个是回调元数据对象。但是没有方法去区别这两种参数选项。在抛开特定的浏览器环境,我们假设null==undefined,所以具有以下规则: 一、 如果一个函数的每个调用都是回调函数,那么他就没有调用元数据对象,所有的参数都是普通java参数。 二、 如果一个最后一个参数具有一个回调功能,那么这个参数就是调用元数据对象。其余的就是普通java参数。 三、 如果第一个参数为null,我们就认为没有回调功能。其余的就是普通java参数。此外还要检查最后一个参数是否为null,如果是则会给予提示信息。 四、 如果最后一个参数为null,则没有回调功能。 五、 还有一个不是很好的约定格式,要表示错误信息。 6 Engin.js文件 这个文件是DWR的引擎文件,他承担着把后台自动生成的javascript接口与前台调用之间的衔接责任。所以任何使用DWR的地方都需要这个文件。 每个使用DWR的页面都必须引入这个文件: 6.1 Call Batching 应用批量功能可以一次性调用多个远程bean方法,因为他是将多个调用做为一次请求,这就减少了与服务器的交互。可以减少许多的开销。 一个批量方法调用以DWREngine.beginBatch()开始WREngine.endBatch()结束。当DWREngine.endBatch()被调用时就说明开始调用批量方法,DWR就将这些方法打包在一起作为一次请求发送给服务器。 DWR会确保所有的方法都回被调用,所以使用批量功能是要注意是否提交了批量调用,如果没有提交批量调用那么这些需要调用的方法将永远排在调用队列中直到提交批量调用。 注意:批量调用方法会有一些缺点,比如他不能在那些已经帮定在一起的方法调用顺序不能保证同步。 例如所有的调用元数据对象的接管函数,超时设定,错误处理等的调用都是在批量的级别上,而不是在调用的级别上。如果一个批量调用含有两个不同超时时间设定的方法,那么除了最后一个之外的所有其他方法的超时设定都被忽略。 6.2 Call Ordering 因为AJAX是个普通的异步远程方法调用模式,所以远程调用的返回结果的顺序可能和你发送请求的顺序不一致。DWREngine.setOrdered(boolean)方法允许你设置远程调用返回结果的顺序和你发送调用请求的顺序保持一致。DWR是通过一个远程方法调用已经结束后在发送下一个调用请求来实现这个功能的。 一般情况我们并不需要返回结果顺序和发送请求顺序保持一致。DWR默认是不保持一致的。 提示:因为保持上面的顺序会对应用程序的性能和响应时间,如果其中的一个消息发生丢失那么浏览器可能会有意想不到以外情况发生。在使用这个功能的时候必须认真考虑是否真的有必要使用。通常比较好的方法是使用异步模式调用。 6.3 Handling Errors and Warnings 对于一些服务器端发生的错误或警告情况DWR都回调用默认的错误和警告方法并且传递一个相关信息,通常这些发生的错误和异常对于用户来说是不可见的。 下面这个方法主要用于以消息框的方式或者在状态栏里显示一个错误或警告的消息。 要改变错误的处理方法可以使用这个方法:DWREngine.setErrorHandler(function), 改变警告的处理方法可以使用这个方法:DWREngine.setWarningHandler(function). 6.4 Remoting Hooks 参考 DWREngine.setPreHook(function) and DWREngine.setPostHook(function). 如果你想在执行远程方法调用之前或之后进行一些处理的话,你可以使用上面的两个方法。上面参数中设置的目标方法必须是没有参数的。如果你想限制特定的组件在一次方法调用没有结束之前不允许再次调用,那么使用上面的方法将很有用。 Post 执行Hooks通常是设置pre-hooks,一般用来撤消先前的操作。关于Hooks的例子可以参照;DWRUtil.useLoadingMessage() 函数。 6.5 Remoting Options(远程调用设置) 关于DWR处理远程调用有若干个设置选项,Method和Verbs对于用户来说是透明的,但对于不同的浏览器可能会有影响。通常DWR会选择正确的方法处理,如果想饶过某些浏览器产生的影响这些参数设置将非常有用。 DWREngine.setMethod(newmethod) 设置Method的实际执行方法,但被设置的方法不能确保被调用。只是DWR首先会尝试调用这个方法。newmethod 必须是DWREngine.XMLHttpRequest 或着 DWREngine.IFrame. DWREngine.setVerb(verb) 允许设置iframe 和 XMLHttpRequest提交数据时的方式,必须是POST或者GET,如果浏览器不支持POST形式,DWR会自动切换到GET方式。
什么是SWFUpload?   SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。 [编辑本段]SWFUpload的主要特点   * 可以同时上传多个文件;   * 类似AJAX的无刷新上传;   * 可以显示上传进度;   * 良好的浏览器兼容性;   * 兼容其他JavaScript库 (例如:jQuery, Prototype等);   * 支持Flash 8和Flash 9;   SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的定制它在浏览器下的外观;它还提供了一组简明的JavaScript事件,借助它们开发者可以方便的在文件上传过程中更新页面内容来营造各种动态效果。   在使用SWFUpload之前,请确认你具备一定的JavaScript和DOM知识。在实际开发中,大部分的错误都是由于错误的设置和低劣的Event Handlers处理程序所造成的。 [编辑本段]文档中文翻译   http://www.v-sky.com/doc/swfupload/v2.1.0/Documentation.html [编辑本段]效果演示   * Classic Form Demo http://demo.swfupload.org/formsdemo ;   * Features Demo http://demo.swfupload.org/featuresdemo ;   * Application Demo http://demo.swfupload.org/applicationdemo ;   * v1.0.2 Plugin Demo http://demo.swfupload.org/v102demo ; [编辑本段]选择合适的Flash控件   在发行包(SWFUpload v2)中含有2个版本的Flash控件(swfupload_f8.swf 与wfupload_f9.swf),其中第一个版本拥有最佳的兼容性,但是为此损失了部分功能;而第二个版本提供了一些附加的功能但是损失了兼容性。 [编辑本段]SWFUpload的初始化与配置   首先,在页面中引用SWFUpload.js ,如      然后,初始化SWFUpload ,如   var swfu;   window.onload = function () {   swfu = new SWFUpload({   upload_url : "http://www.swfupload.org/upload.php",   flash_url : "http://www.swfupload.org/swfupload_f9.swf", file_size_limit : "20480"   });   };   以下是一个标准的SWFUpload初始化设置所需的参数,你可以根据需要自己进行删减:   {   upload_url : "http://www.swfupload.org/upload.php", 处理上传请求的服务器端脚本URL   file_post_name : "Filedata", 是POST过去的$_FILES的数组名   post_params : {   "post_param_name_1" : "post_param_value_1",   "post_param_name_2" : "post_param_value_2",   "post_param_name_n" : "post_param_value_n"   },   file_types : "*.jpg;*.gif", 允许上传的文件类型   file_types_description: "Web Image Files", 文件类型描述   file_size_limit : "1024", 上传文件体积上限,单位MB   file_upload_limit : 10, 限定用户一次性最多上传多少个文件,在上传过程中,该数字会累加,如果设置为“0”,则表示没有限制   file_queue_limit : 2, 上传队列数量限制,该项通常不需设置,会根据file_upload_limit自动赋值   fl

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值