异步加载打包结果为xml数据,xsl文件解析xml数据显示在指定的div中
异步加载封装结果为xml数据,xsl文件解析xml数据显示在指定的div中
各层的内容通过异步得到xml数据,并对每个模块用一个xsl文件解析,将解析结果放入指定层
这里只显示主要的代码
1> jsp页面上定义层的id, 并在form中指定需要异步加载数据的js方法
<form action="javascript:showAllXML();"> //调用异步加载数据的js方法 <div id="swgl"> //页面上显示数据的层 </form>
2> js文件里的方法
//各个层的全局变量: var lgwgl_swgl = document.getElementById("swgl"); //进行异步调用的函数 function doAjax(url,doNext,isXML){ var req = newXMLHttpRequest(); //回调 req.onreadystatechange = getReadyStateHandler(req, doNext,isXML); req.open("GET", url, true); //不要被缓存 req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); req.setRequestHeader("If-Modified-Since","0"); req.send(); } //显示所有模块内容(入口函数,在index.jsp中调用该函数) function showAllXML(){ //异步调用得到xml数据并解析 doAjax(basePath+"/action/fileListAction.do?method=getPageList",showGwgl,1); //showGwgl:被调用的函数名。 } //异步得到xml后进行解析并将解析结果放入指定层的各个函数 function showGwgl(xmlNode){ var myxsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument"); myxsl.async = false; myxsl.load(basePath+"/xsl/rssGw.xsl"); //指定解析的xsl文件为:rssGw.xsl lgwgl_swgl.innerHTML = unescape(xmlNode.transformNode(myxsl)); //指定解析结果显示在lgwgl_swgl层 }
3> 控制层。被js中的doAjax调用的fileListAction中的getPageList方法。
public ActionForward getPageList(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) { List infoList = baseDAO.getList();//从持久层获取数据 Xml xml = new Xml(); // 调用toXml_dbgz方法,将结果封装为xml文件 String strXml = xml.toXml_dbgz(infoList); resp.setContentType("text/xml;charset=GBK"); resp.getWriter().write(strXml); return null; } //封装结果为xml文件的方法 public String toXml_dbgz(List infoList){ StringBuffer xml = new StringBuffer(); xml.append("<?xml version=\"1.0\" encoding=\"GBK\"?>\n"); xml.append("<channel>\n"); if(infoList!=null){ long wfId = 0;//工作流ID long bus_Id = 0;//收文ID String title = "";//标题 ZybFilesForList file = null; for(int i=0;i<infoList.size();i++){ xml.append("<item>\n"); file= (ZybFilesForList)infoList.get(i); wfId = file.getEntryId().longValue();//工作流id bus_Id = file.getBus_Id();//收文id title = file.getTitle();//标题 if(WorkFlowTools.checkString(title)) xml.append("<title>"+toGeneralXmlStr(title)+"</title>\n"); else xml.append("<title>无标题</title>\n"); xml.append("<acceptDate>"+DateTools.getDaySimple(file.acceptDate)+"</acceptDate>\n"); xml.append("<titleLink>view("+wfId+","+bus_Id+")</titleLink>\n"); //定义一个链接,view为js方法名,wfId和bus_Id为参数 xml.append("<tableName>"+file.getTableName()+"</tableName>\n"); xml.append("<workType>"+file.getWorkType()+"</workType>\n"); xml.append("<workLink>viewInWF("+wfId+","+bus_Id+")</workLink>\n"); xml.append("</item>\n"); } }else{ ..... } }
4> xsl文件。js的showGwgl方法中指定的解析文件:rssGw.xsl
<?xml version="1.0" encoding="gbk"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/channel"> <dl> <xsl:for-each select="item"> <dd> <xsl:if test="title!=''"> <xsl:if test="tableName='szs_sw'"><!-- 收文 --> <img src="/myDoSZS/images/firstpage/ico_b.gif" alt="收文" /> </xsl:if> <xsl:if test="tableName='szs_fw'"><!-- 发文 --> <img src="/myDoSZS/images/firstpage/ico_y.gif" alt="正式发文" /> </xsl:if> <xsl:if test="tableName='szs_qb'"><!-- 签报 --> <img src="/myDoSZS/images/firstpage/ico_g.gif" alt="其他发文" /> </xsl:if> </xsl:if> <a href="javascript:{titleLink}" title='{title}'> <xsl:value-of select="title"/> </a> </dd> <dt> <xsl:value-of select="acceptDate"/> <xsl:text>   </xsl:text> <!--  显示为空格 --> <xsl:if test="workType='0'"><!-- 签收 --> <a href="javascript:{workLink}"> <xsl:text>签收</xsl:text> </a> </xsl:if> <xsl:if test="workType='1'"><!-- 编辑 --> <a href="javascript:{workLink}"> <xsl:text>编辑</xsl:text> </a> </xsl:if> </dt> </xsl:for-each> </dl> </xsl:template> </xsl:stylesheet>
1 楼
cuisuqiang
2012-05-24
挺不错的,值得学习!