转载: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应用起来也挺简单的。