转载:http://www.jeedao.net/posts/list/25.page
JForum 2.1.7版本中少量的使用了DWR,应该是JForum开始尝试使用Ajax吧。JForum中仅“预览帖子”和后台管理系统的“邮件发送测试”两个功能使用了DWR。
查看\WEB-INF\dwr-jforum.xml文件你会发现这里只定义了一个java类“net.jforum.util.ajax.AjaxUtils”。dwr-jforum.xml是JForum中的DWR配置文件,你可以在里面增加更多的DWR调用功能。
现在以“预览帖子”功能为例说明一下JForum中对DWR的应用,打开AjaxUtil.java文件,里面有这样一个函数:
Code:
public static Post previewPost(Post p)
{
if (p.isHtmlEnabled()) {
p.setText(SafeHtml.makeSafe(p.getText()));
}
p = PostCommon.preparePostForDisplay(p);
return p;
}
这是服务器端代码。
再打开\templates\default\post_form.htm文件,留意以下代码:
Code:
<script type="text/javascript" src="${contextPath}/dwr/interface/AjaxUtils.js?${startupTime}"></script>
<script type="text/javascript" src="${contextPath}/dwr/engine.js?${startupTime}"></script>
这是由DWR动态生成的javascript脚步程序。
打开/templates/default/js/post.js文件,看以下代码:
Code:
function previewMessage()
{
var f = document.post;
if (supportAjax()) {
var p = {
text:f.message.value,
subject:f.subject.value,
htmlEnabled:!f.disable_html.checked,
bbCodeEnabled:!f.disable_bbcode.checked,
smiliesEnabled:!f.disable_smilies.checked
};
AjaxUtils.previewPost(p, previewCallback);
}
else {
f.preview.value = "1";
f.submit();
}
}
function previewCallback(post)
{
document.getElementById("previewSubject").innerHTML = post.subject;
document.getElementById("previewMessage").innerHTML = post.text;
document.getElementById("previewTable").style.display = '';
var s = document.location.toString();
var index = s.indexOf("#preview");
if (index > -1) {
s = s.substring(0, index);
}
document.location = s + "#preview";
}
previewMessage()函数调用AjaxUtils.previewPost(p, previewCallback)通过DWR引擎调用后台java类的功能,并设置了回调函数previewCallback。服务器返回信息将通过previewCallback(post)函数处理。
以前没有研究过DWR,不过现在看JForum里面的应用觉得DWR应用起来也挺简单的。 
287

被折叠的 条评论
为什么被折叠?



