JForum中对DWR的应用

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

你可能感兴趣的:(JavaScript,Ajax,应用服务器,DWR,F#)