??xml version="1.0" encoding="utf-8" standalone="yes"?>
DWRUtil.selectRange("selectRangeBasic", 5, 15) 选中selectRangeBasic文本框里面从W五个字W到W?5个字W之间的字符.
DWRUtil._getSelection("selectRangeBasic") 得到selectRangeBasic文本框里选中的字W?
var arrayFive = [ 'One', 'Two', 'Three', 'Four', 'Five' ];
DWRUtil.addOptions('addOptionsBasic', arrayFive); 数l添加到下拉菜单里面?
DWRUtil.getValue('addOptionsBasic') 得到 addOptionsBasic 对象的?
DWRUtil.getValue("precloneNode1Inner1suf", { textContent:true }); 后面加个参数,?precloneNode1Inner1suf元素?UL" ?它返回了元素里面得?也就是说L了HTML标签部分.
DWRUtil.getText('addOptionsBasic') 得到下拉?addOptionsBasic 昄的文?
var arrayObject = [
{ name:'One', value:'1' },
{ name:'Two', value:'2' },
{ name:'Three', value:'3' },
{ name:'Four', value:'4' },
{ name:'Five', value:'5' }
];
DWRUtil.addOptions('addOptionsObject1', arrayObject, "name"); 数l添加到下拉菜单里面?后面的参数是定那个是给用户昄的文?同时也是?
DWRUtil.addOptions('addOptionsObject1', arrayObject, "name","value"); 同上,不过后面参数? 3=文本;4=?
var map = { one:1, two:2, three:3, four:4, five:5 };
DWRUtil.addOptions('addOptionsMap1', map); 同上, one 是?1 是文?
DWRUtil.addOptions('addOptionsMap1', map,true); 同上, 1 是?one 是文?
-------------------------------------------------------------------------------------
<ul id="removeItems">
<li>One</li><li>Two</li><li>Three</li><li>Four</li><li>Five</li>
</ul>
如果是列表显C?如上;则上面所有方法和select 下拉框用一?
-------------------------------------------------------------------------------------
DWRUtil.cloneNode('cloneNode1', { idPrefix:'pre', idSuffix:'suf' });克隆一个节?参数一克隆的节点的id,W二个参数是在克隆的节点id前面加pre,后面加suf.(注意:如果该节Ҏ子节点的?子节点的名字也一样加)
DWRUtil.addRows(id, array, cellfuncs, [options]);
原理:
for each member in array
for each function in cellfuncs
create cell from cellfunc(array[i])
循环数组,循环函数,建立单元调用函数;(序军_)
例如:
DWRUtil.addRows('addRowsBasic', arrayFive, [
function(data) { return data; },
function(data) { return data.toUpperCase(); },
function(data) {
var input = document.createElement("input");
input.setAttribute("type", "button");
input.setAttribute("value", "DOM Test");
input.setAttribute("onclick", "alert('" + data + "');");
return input;
},
function(data) { return "<input type='button' value='innerHTML Test' onclick='alert(\"" + data + "\");'>"; }
]);
高部分:
W四个参Cؓ对单元的高操作,主要下面的两个方?
function defaultRowCreator(options) {
return document.createElement("tr");
};
function defaultCellCreator(options) {
return document.createElement("td");
};
例子:
DWRUtil.addRows( "demo2",[ 'Africa', 'America', 'Asia', 'Australasia', 'Europe' ] , cellFuncs, {
rowCreator:function(options) {
var row = document.createElement("tr");
var index = options.rowIndex * 50;
row.style.color = "rgb(" + index + ",0,0)";
return row;
},
cellCreator:function(options) {
var td = document.createElement("td");
var index = 255 - (options.rowIndex * 50);
td.style.backgroundColor = "rgb(" + index + ",255,255)";
td.style.fontWeight = "bold";
return td;
}
});
其中 options 参数的属性可用的?(没试q?自己试试?
rowData: the element value from the array (the same for all cells in a row)
rowIndex: the key (if map) or index (if array) from the collection
rowNum: The row number counting from 0 in this section (so if you are using tbody, it counts rows in the tbody and not the whole table)
data: The 'computed' data value for the cell (cellCreators only)
cellNum: The cell number that we are altering counting from 0 (cellCreators only)
DWRUtil.setValues(); 扚w讄?
var settings = {
setValuesDiv:"setValuesDiv",
setValuesSpan:"setValuesSpan",
setValuesSelect:"two",
setValuesText:"setValuesText",
setValuesPassword:"AB",
setValuesTextarea:"setValuesTextarea",
setValuesButton1:"B1-Two",
setValuesButton2:"B2-Two",
setValuesRadio1:true,
setValuesRadio2:false,
setValuesRadio3:"one",
setValuesRadio4:"two",
setValuesCheckbox1:true,
setValuesCheckbox2:false
};
DWRUtil.setValues(settings);
DWRUtil.getValues(empty);扚w获取?
var empty = {
setValuesDiv:null,
setValuesSpan:null,
setValuesSelect:null,
setValuesText:null,
setValuesPassword:null,
setValuesTextarea:null,
setValuesButton1:null,
setValuesButton2:null,
setValuesRadio1:null,
setValuesRadio2:null,
setValuesRadio3:null,
setValuesRadio4:null,
setValuesCheckbox1:null,
setValuesCheckbox2:null
};
DWRUtil.getValues(empty);
DWRUtil.useLoadingMessage("Ping");//cMgmail那个样子,在右上角昄加蝲"ping";可用自定样式,具体查询;http://getahead.ltd.uk/dwr/browser/util/useloadingmessage
DWRUtil.toDescriptiveString("id",数字);弹出调试信息,数字?,1,2.一U比一U高.
DWRUtil.onReturn(event, submitFunction);一般在form表单里面,防止在文本框上按回R提交表?
例如:
<input type="text"
onkeypress="DWRUtil.onReturn(event, submitFunction)"/>
<input type="button" onclick="submitFunction()"/>
]]>
DWR主要׃部门l成。javascript与web服务器通信q更新web;q行在web服务器的Servlet处理hq把响应发回览器?br>
1 . 配置web.xml
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
2 当我们想看dwr自动生成的测试页?可在java代码
servlet中加
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
q个参数DWR默认是false.如果选择true.我们可以通过url http://localhost:port/app/dwr ,你就可以看到你部|的每个DWR class。ƈ且可以测试java代码的每个方法是否运行正常。ؓ了安全考虑Q在正式环境下你一定把q个参数设ؓfalse.
3 log信息配置
我喜Ƣ用log4j输出日志,那么在log4j.properties下加Qlog4j.logger.uk.ltd.getahead.dwr = debug。这样可以看DWR的调试日志?
4 配置dwr.xml (和web.xml同目?
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
q里的多数元素都是可选的 - 你真正必ȝ道的是指定一个creator和一个javascript名字?/p>
creator属?/strong> 是必ȝ - 它用来指定用U创造器?/p>
默认情况下DWR1.1?U创造器。它们是Q?/p>
javascript属?/strong> 用于指定览器中q个被创造出来的对象的名字。你不能使用Javascript的关键字?/p>
scope属?/strong> 非常cMservlet规范中的scope?它允怽指定q个bean在什么生命范围。选项?application", "session", "request" ?page"。这些值对于Servlet和JSP开发者来说应该相当熟悉了?/p>
scope属性是可选的。默认是"page"。如果要使用"session"需要cookies。当前的DWR不支持ULR重写?/p>
param元素 被用来指定创造器的其他参敎ͼ每种构造器各有不同。例如,"new"创造器需要知道要创徏的对象类型是什么。每一个创造器的参数在各自的文中能找到。请查看上面的链接?/p>
include和exclude元素 允许创造器来限制类中方法的讉K。一个创造器必须指定include列表或exclude列表之一。如果是include列表则暗C默认的讉K{略?拒绝"Q如果是exclude列表则暗C默认的讉K{略?允许"?/p>
通过研究uk.ltd.getahead.dwr.DWRServletq个servlet来研I下dwr到底是如何工作的?br>
5 dwr.jar下蝲后放lib?br>
源码析
dwr的设计很象webwork2的设?隐藏http协议,扩展性,兼容性及强?/p>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
q样/dwr/*下的所有的h都是p个servlet来处?到底生理了什么呢,我们q是以例子来说明?
1 web服务器启动,DWRServlet init()Ҏ调用Qinit主要做了以下工作?
讄日志U别、实例化DWR用到的单例类Q这些类在jvm中只有一个实例对象)、读去配|文Ӟ包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml. config*.xmlQ?br>2 h处理
DWRServlet.doGet, doPostҎ都调用processor.handle(req, resp)Ҏ处理。Processor对象在init()Ҏ中已l初始化了?nbsp;
代码
public void handle(HttpServletRequest req, HttpServletResponse resp)
throws IOException
{
String pathinfo = req.getPathInfo();
if(pathinfo == null || pathinfo.length() == 0 || pathinfo.equals("/"))
{
resp.sendRedirect(req.getContextPath() + req.getServletPath() + '/' + "index.html");
} else
if(pathinfo != null && pathinfo.equalsIgnoreCase("/index.html"))
{
doIndex(req, resp);
} else
if(pathinfo != null && pathinfo.startsWith("/test/"))
{
doTest(req, resp);
} else
if(pathinfo != null && pathinfo.equalsIgnoreCase("/engine.js"))
{
doFile(resp, "engine.js", "text/javascript");
} else
if(pathinfo != null && pathinfo.equalsIgnoreCase("/util.js"))
{
doFile(resp, "util.js", "text/javascript");
} else
if(pathinfo != null && pathinfo.equalsIgnoreCase("/deprecated.js"))
{
doFile(resp, "deprecated.js", "text/javascript");
} else
if(pathinfo != null && pathinfo.startsWith("/interface/"))
{
doInterface(req, resp);
} else
if(pathinfo != null && pathinfo.startsWith("/exec"))
{
doExec(req, resp);
} else
{
log.warn("Page not found. In debug/test mode try viewing /[WEB-APP]/dwr/");
resp.sendError(404);
}
}
dwr/*处理的请求也p几种?br>
Q?Qdwr/index.htmlQdwr/test/q种只能在debug模式下用,调试用?
dwr/engine.jsQdwr/util.jsQdwr/deprecated.js当这个请求到达,从dwr.jar包中d文g,响应回去。(重复h有缓存)
Q?Q当dwr/interface/q种h到来Q(例如我们在index.html中的 <script type='text/javascript' src='dwr/interface/JDate.js'></script>QDWR做一件伟大的事。把我们在WEB-INF/dwr.xml中的
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
java.util.Date转化为javascript函数?
http://localhost:port/simpledwr/dwr/interface/JDate.js看看吧?
l节也比较简单,通过java反射Q把Ҏ都写成javascript特定的方法。(我觉得这些{换可以放到缓存里Q下ơ调用没必要再生成一遍,不知道作者ؓ什么没q样做)?
Q?Qdwr/exec
javascript调用Ҏ时发送这U请求,可能是XMLHttpRequest或IFrame发送?
当然Qjavascript调用的方法签名与java代码一_包括参数Q还有javascript的回调方法也传到了服务器端,在服务器端很Ҏ实现。回调方法的java的执行结?q回cM <script>callMethod(l果)<script>的javascript字符?在浏览器执行。哈Q一切就q么单,巧妙?br>
我这里还有DWR中文文. http://www.tkk7.com/Files/LiuTing/DWR中文文.rar
]]>
վ֩ģ壺
Ʒsuvһ88|
ŷպٲ|
ֻѵAVߵӰ|
Ʒһ|
Ļһҳ|
ƷŮþþ|
͵ľƷ|
¾þþþa|
벻?Ƭ|
˳Ƶۿ
|
Ʒ鶹123|
ȫƵѹۿ߿|
ɫͼС˵ר|
aëƬƵѹۿӰԺ|
þþƷAV鶹|
99re6ƵƷ|
һ|
վɫƵѹۿ|
fuli߹ۿ|
ƷСƵ|
ѸԴվƵ|
ɫһëƬ|
þþþAVרվ|
Ƶѹۿ1000|
˿wwwѸ|
һۿƵ߲
|
߹ۿѹۿ|
ƷŮþþ
|
߹ۿƵվɫ|
AVһ|
2019Ļ6|
ۺavһ
|
99߹ۿ|
77777ҹ|
˾þһҳ|
Ů߲վ|
һҹ|
һƬѲŵӰ|
ҵijdzӪѹۿ|
Ƶѹۿ|
һƬѿ|