学IT就来ACCP教程网
您的位置:ACCP教程网图文教程JSP教程 ┳ 内容

Struts2动态返回Xml

时间:2009-12-31 14:53:41 |来源:网络 |作者:秩名 |点击:

dhtmlXTree的节点定义可以从服务器生成的Xml中动态加载,我目前使用的是Struts2. 因此,我的做法是,在Javascript生成dhtmlxTree的时候,请求一个加载Struts2的action,Struts2的Action进行用户权限认证,动态生成菜单的Xml字符串。而在jsp中只输出这一个字符串。
开始进行的都比较顺利,但是客户端和服务端一连起来就出问题,页面在加载Xml的时候总是弹出一个对话框,说是加载的xml格式不正确。但是我在IE中直接输入Action,页面显示的结果十分正确,没有问题。后来,无意中我查看了返回xml页面的源文件,这才发现了问题。
原来,xml的<和>全都被转换成&lt;和&gt;了。
我一开始是想在后台考虑如何对字符串进行转换,后来在查struts2文档的时候发现,<s:property有一个escape属性,可以完美地解决这个问题,<s:property value="menuXmlString" escape="false"/>
让我们来看一下例子

现在把Struts2结合DHtmlxTree的经验心得整理一下,发表出来:
一、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="demo" extends="struts-default">
        <action name="menu" method="execute" class="demo.TreeMenuAction">
                <result>/WEB-INF/menu.jsp</result>
        </action>
    </package>
</struts>


 


二、tree.jsp
 

<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String 
path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path;
%
>
 
<html>
 
<head>
 
<title>Main Page</title>
 
<!-- 注意此处的路径需要根据各自具体情况修改 --> 
<link rel="STYLESHEET" type="text/css" href="styles/dhtmlxtree.css">
<script src="scripts/dhtmlxcommon.js"></script> 
<script src="scripts/dhtmlxtree.js"></script>
 
</head>
 
<body onload="loadTree(); " style="padding: 0; margin: 0; overflow: hidden; height: 100%;">
 
 
<script>
String.prototype._dhx_trim = function(){
    return this.replace(/
&nbsp;/g," ").replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,"");
}
 
 
/* init tree */
 var tree;
  
function loadTree(){
    tree=new dhtmlXTreeObject("doctree_box","100%","100%",0);
    tree.setImagePath("images/");    
<!-- 注意此处的路径需要根据各自具体情况修改 --> 
    tree.setOnClickHandler(
        function(id){ openPathDocs(id); }
    );
    tree.loadXML("
<%=basePath%>/menu.do"); 
 }
 
/* open path funtion */

function openPathDocs(id){
    if (tree.getUserData(id, "thisurl") != null ){
        window.frames.sampleframe.location.href = "
<%=path%>/" + tree.getUserData(id, "thisurl") + ".do";
        return;
    }
}
 
function autoselectNode(){
    tree.selectItem(node,true);
    tree.openItem(node);

 
</script>
 
 
 
 
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
    
<tr>
        
<td valign="top" width="276">
            
<div id="doctree_box" style="width: 274px; height: 100%;"></div>
        
</td>
        
<td width="10" background="images/grid.gif">
            
&nbsp;
        
</td>
        
<td align="right"> 
            
<iframe id="sampleframe" name="sampleframe" width="100%" height="99%" frameborder="0" src="blank.html" style="border: 0px solid #cecece;"></iframe>
        
</td>
    
</tr>
</table>
 
 
</body>
</html>
 

上面的JavaScript基本上是从dhtmlx的例子中修改而来,理解起来并不复杂,只有
String.prototype._dhx_trim = function(){
 return this.replace(/&nbsp;/g," ").replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g,"");
}
这一段代码含义不明。

共 2 页
  • 12
    顶一下
    (1)
    100%
    踩一下
    (0)
    0%
    loading.. 评论加载中....