专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » strutsajax:Struts 2和AJAX(第 2部分) »正文

strutsajax:Struts 2和AJAX(第 2部分)

来源: 发布时间:星期二, 2009年1月20日 浏览:85次 评论:0
  在上篇文章Struts 2和AJAX(第部分)我已经简单地介绍了<s:tree />些使用方法接下来我将继续深入讲解<s:tree />使用和通过DWR实现AJAX校验

  更多<s:tree />   在Struts 2show中有两个<s:tree />例子分别是静态树和动态树所谓静态树即是在编写JSP代码时通过<s:treenode />生成树节点篇文章例子就是个典型静态树而动态树则是在运行期间Struts 2 运行时(Runtime)根据数据动态创建树节点虽然在两个例子中<s:tree />theme属性都为“ajax”但是从严格意义上来说这两种树都不属于AJAX树它们都是在输出页面时将全部节点加载到其中而不是在父节点展开时通过XHR(XMLHttpRequest)获取节点数据

  动态树

  下面我们先看下动态树例子接着再步步地将其改造为名副其实AJAX 树下例将会把WEB应用目录树展现在JSP页面中因此我需要先包装下java.io.File 类代码如下:

package tutorial;
import java.io.File;
public FileWrapper {
  private File file;
  public FileWrapper(String path) {
    file = File(path);
  }
  public FileWrapper(File file) {
    this.file = file;
  }
  public String getId {
     "file_" + file.hashCode;
  }
  public String getName {
     file.getName;
  }
  public String getAbsolutePath {
     file.getAbsolutePath;
  }
  public FileWrapper getChildren {
    File files = file.listFiles;
    (files != null && files.length > 0) {
       length = files.length;
      FileWrapper wrappers = FileWrapper[length];
      for( i = 0; i < length; i) {
        wrappers[i] = FileWrapper(files[i]);
      }
       wrappers;
    }
     FileWrapper[0];
  }
}


  清单1 src/tutorial/FileWrapper.java

  的所以需要对File类进行如此包装<s:tree />用于动态树时rootNode、nodeIdProperty、nodeTitleProperty 和 childCollectionProperty等属性都必填

  然后是Action类代码如下:

package tutorial;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.erceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public DynamicTreeAction extends ActionSupport implements ServletRequestAware {
  private final long serialVersionUID = 1128593047269036737L;
  private HttpServletRequest request;
  private FileWrapper root;
  public void ServletRequest(HttpServletRequest request) {  
    this.request = request;
  }
  public FileWrapper getRoot {
     root;
  }
  @Override
  public String execute {
    root = FileWrapper(request.getSession.getServletContext.getRealPath("/"));    
     SUCCESS;
  }
}


  清单2 src/tutorial/DynamicTreeAction.java

  上述代码取得WEB应用根目录绝对路径后化FileWrapper对象root该对象将为JSP页面<s:tree />根节点如下代码所示:

<%@ page language="java" contentType="text/html; char=utf-8"
  pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Struts 2 AJAX - More Tree</title>
    <s:head theme="ajax" debug="true" />
    <script type="text/javascript">
    /* <![CDATA[ */
      function treeNodeSelected(arg) {
        alert(arg.source.title + ' selected');
      }
      function treeNodeExpanded(arg) {
        alert(arg.source.title + ' expanded');
      }
      function treeNodeCollapsed(arg) {
        alert(arg.source.title + ' collapsed');
      }
      dojo.addOnLoad(function {        
        var t = dojo.widget.byId('appFiles');
        dojo.event.topic.subscribe(t.eventNames.expand, treeNodeExpanded);        
        dojo.event.topic.subscribe(t.eventNames.collapse, treeNodeCollapsed);
        var s = t.selector;        
        dojo.event.connect(s, 'select', 'treeNodeSelected');
      });
    /* ]]> */  
    </script>
  </head>
  <body>
    <h2>
      Dynamic Tree Example
    </h2>
    <div style="float:left; margin-right: 50px;">
      <s:tree id="appFiles" theme="ajax" rootNode="root"
        nodeTitleProperty="name" nodeIdProperty="id"
        childCollectionProperty="children" />
    </div>
  </body>
</html>


  清单3 WebContent/Tree.jsp   <s:tree />treeCollapsedTopic和treeExpandedTopic属性都没有起作用所以如果我们想要监听这两个事件就必须使用上述代码思路方法

  最后是struts.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <package name="Struts2_AJAX_DEMO" extends="struts-default">
    <action name="DynamicTree" ="tutorial.DynamicTreeAction">
      <result>Tree.jsp</result>
    </action>
  </package>
</struts>


  清单4 src/struts.xml   发布运行应用在浏览器地址栏中键入http://localhost:8080/Struts2_Ajax2/DynamicTree.action有如下图所示页面:

    </action>

  清单13 src/struts.xml配置片段   发布运行应用在浏览器地址栏中键入http://localhost:8080/Struts2_Ajax2/AjaxTreeTheme.action结果如图2所示

  整理总结   通过上述例子大家知道Struts 2 AJAX 标志是基于DojoControl控件开发所以如果大家希望熟练地使用这些标志最好去了解下Dojo

  本来还打算介绍下Struts 2和DWR不过看看文章篇幅似乎足够自成篇了因此DWR相关内容要留待下文继续了



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: