如果数据量不大的话,直接发给客户端,通过xsl进行排序、显示还是不错的。
解决方案 »
- 求助,关于java中定义无符号短整形
- 急,Lucene 全文搜索问题,一天了,没有解决
- HibernateTemplate doExecute()方法问题?
- struts2 环境配置问题求助
- dsfsdf
- 初用DOM4J,请教一个问题
- javascript + jsp
- 100分悬赏:谁能找出这个程序的bug,并顺利作弊,所得产品(MP3)全部给他?
- 超级奇怪的结果,谁给我讲讲函数调用的堆栈是样的?
- 有关struts的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- jbuilder+weblogic进行开发,加入打印程序,为什么服务器会停止?高手帮忙!!
- 为什么我的CMP部署第一次运行正常,以后运行报No such entity错误?在线!!
我说的是不是有点乱。呵呵帮忙分析分析
另外一个问题,保存的数据其实是证券信息。那么1000多只个股信息我是分别保存还是放在一个XML文件中呢,我选择分别保存,我觉得放在一个文件里太大了。
1000个股票信息不多。
呵呵,算小的了。
我正在看XMLPattern.2个阿根廷人写的。等我看完和你们交流
2、你的客户端是浏览器吗?还是自己写的小型应用(如Applet)?如果是浏览器的话建议服务器端处理,因为M$的xsl支持并不标准,也不完整,所以像CSDN这样的网站……我不说什么了。
3、排序很简单啊:XML:
-------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Books.xsl"?>
<Books>
<book category="reference">
<author last="Nigel" middle="" first="Rees" />
<title>Sayings of the Century</title>
<price>8.95</price>
</book>
<book category="fiction">
<author last="Evelyn" middle="" first="Waugh" />
<title>Sword of Honour</title>
<price>12.99</price>
</book>
<book category="children's book">
<author last="Rowling" middle="K." first="J." />
<title>Harry Potter and the Sorcerer's Stone</title>
<price>15.96</price>
</book>
<book category="children's book">
<author last="Williams" middle="Aurelia" first="Lori" />
<title>When Kambia Elaine Flew in from Neptune</title>
<price>13.60</price>
</book>
<book category="children's book">
<author last="Pullman" middle="" first="Philip" />
<title>The Amber Spyglass (His Dark Materials, No 3)</title>
<price>15.96</price>
</book>
<book category="fiction">
<author last="Herman" middle="" first="Melville" />
<title>Moby Dick</title>
<price>8.99</price>
</book>
<book category="fiction">
<author last="Grisham" middle="" first="John" />
<title>A Painted House</title>
<price>16.77</price>
</book>
<book category="fiction">
<author last="Binchy" middle="" first="Maeve" />
<title>Scarlet Feather</title>
<price>20.76</price>
</book>
<book category="fiction">
<author last="J." middle="R. R." first="Tolkien" />
<title>The Lord of the Rings</title>
<price>22.99</price>
</book>
</Books>XSL:
-------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" encoding="UTF-8" indent="yes" xalan:indent-amount="2"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:call-template name="html"/>
</xsl:template>
<xsl:template name="body">
<body>
<h1>
<xsl:value-of select="'A list of books to be displayed in a web browser via html'"/>
</h1>
<xsl:call-template name="table"/>
</body>
</xsl:template>
<xsl:template name="head">
<head>
<title>
<xsl:value-of select="'title'"/>
</title>
</head>
</xsl:template>
<xsl:template name="html">
<html>
<xsl:call-template name="head"/>
<xsl:call-template name="body"/>
</html>
</xsl:template>
<xsl:template name="table">
<table>
<xsl:attribute name="border">
<xsl:value-of select="'2'"/>
</xsl:attribute>
<xsl:apply-templates select="/Books/book">
<xsl:sort select="@category"
order="ascending"
case-order="upper-first"
data-type="text"/>
<xsl:sort select="price/text()"
order="ascending"
case-order="upper-first"
data-type="number"/>
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match="book">
<tr>
<td>
<xsl:value-of select="concat(author/@first, ' ', author/@last)"/>
</td>
<td>
<xsl:value-of select="title/text()"/>
</td>
<td>
<xsl:value-of select="@category"/>
</td>
<td>
<xsl:value-of select="price/text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="*|@*|comment()|processing-instruction()|text()">
<xsl:copy>
<xsl:apply-templates select="*|@*|comment()|processing-instruction()|text()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
不难的。
是这样一个报表需要俺每个栏目排序,那么他每次排序都要通过服务器端就有些过分了。第一次生成数据时我会按默认排序栏目排序的。to 灯泡
我这个需求不是很明确,我想减轻服务器压力,因为终端用户会很多。并发现象肯定会有。to 红星星
谢谢
用户提交信息,服务端加入信息到XML文件,之后通过XSLT显示给用户么?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://www.risesoft.net">
<msxsl:script language="javascript" implements-prefix="user"><![CDATA[
function getName(node) {
elementName = node.item(0).nodeName;
return elementName;
}
]]></msxsl:script>
<xsl:param name="totalPageNumber" select="1"/>
<xsl:param name="recordsPerPage" select="5"/>
<xsl:param name="totalRecords" select="1"/>
<xsl:param name="currentPageNumber" select="1"/>
<xsl:param name="beginPage" select="1"/>
<xsl:param name="endPage" select="1"/>
<xsl:variable name="from" select="$recordsPerPage * ($currentPageNumber - 1) + 1"/>
<xsl:variable name="to">
<xsl:choose>
<xsl:when test="$totalPageNumber = $currentPageNumber">
<xsl:value-of select="$totalRecords"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$recordsPerPage*$currentPageNumber"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:template match="/">
<table width="90%" cellpadding="0" cellspacing="1" border="0" style="font-size:12px" bgcolor="#9A9792">
<tr bgcolor="#E7E7E7" style="cursor: hand;padding:2px;font-size:13px;font-weight: bold;" align="center">
<xsl:for-each select="/*/*[1]/*">
<td>
<div onclick="sortField("{user:getName(.)}")"><xsl:value-of select="user:getName(.)"/></div>
</td>
</xsl:for-each>
</tr>
<xsl:for-each select="/*/*[position() >= $from and position() <= $to]">
<xsl:sort select="*[1]" order="ascending" data-type="number"/>
<tr bgcolor="#FFFFFF" align="center" style="padding:2px">
<xsl:for-each select="*">
<td>
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
<xsl:call-template name="pageNavigator">
<xsl:with-param name="totalPageNumber" select="$totalPageNumber"/>
<xsl:with-param name="totalRecords" select="$totalRecords"/>
<xsl:with-param name="currentPageNumber" select="$currentPageNumber"/>
<xsl:with-param name="recordsPerPage" select="$recordsPerPage"/>
<xsl:with-param name="beginPage" select="$beginPage"/>
<xsl:with-param name="endPage" select="$endPage"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="pageNavigator">
<xsl:param name="totalPageNumber"/>
<xsl:param name="totalRecords"/>
<xsl:param name="recordsPerPage"/>
<xsl:param name="currentPageNumber"/>
<xsl:param name="beginPage"/>
<xsl:param name="endPage"/>
<table width="90%" cellpadding="0" cellspacing="0" border="0" style="border:1px black none;font-size:12px" bgcolor="#E3E3E3">
<tr style="padding:2px">
<td align="center">
绗?#160;<xsl:value-of select="$from"/> 鏉?#160;鍒?
绗?#160;<xsl:value-of select="$to"/> 鏉?#160; 
绗?#160;<xsl:value-of select="$currentPageNumber"/> 椤?
  鎬?#160;<xsl:value-of select="$totalPageNumber"/> 椤?
  鍏?#160;<xsl:value-of select="$totalRecords"/> 鏉¤褰?
</td>
<td align="right">
<xsl:if test="$currentPageNumber >10">
<a href="javascript:jumptoPage({$beginPage - 1})"><<</a> 
</xsl:if>
<xsl:call-template name="printPages">
<xsl:with-param name="beginPage" select="$beginPage"/>
<xsl:with-param name="endPage" select="$endPage"/>
<xsl:with-param name="currentPageNumber" select="$currentPageNumber"/>
<xsl:with-param name="totalPageNumber" select="$totalPageNumber"/>
</xsl:call-template>
</td>
</tr>
</table>
</xsl:template>
<xsl:template name="printPages">
<xsl:param name="beginPage"/>
<xsl:param name="endPage"/>
<xsl:param name="currentPageNumber"/>
<xsl:param name="totalPageNumber"/>
<xsl:if test="$totalPageNumber > 1">
<xsl:if test="$beginPage <= $endPage">
<xsl:choose>
<xsl:when test="$beginPage = $currentPageNumber">
<xsl:value-of select="$beginPage"/> 
</xsl:when>
<xsl:otherwise>
<a href="javascript:jumptoPage({$beginPage})">
<xsl:value-of select="$beginPage"/>
</a> 
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$beginPage = $endPage and $beginPage != $totalPageNumber">
<a href="javascript:jumptoPage({$endPage + 1})">>></a>
</xsl:if>
<xsl:call-template name="printPages">
<xsl:with-param name="beginPage" select="$beginPage + 1"/>
<xsl:with-param name="endPage" select="$endPage"/>
<xsl:with-param name="currentPageNumber" select="$currentPageNumber"/>
<xsl:with-param name="totalPageNumber" select="$totalPageNumber"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<head>
<title>XML、XSLT分页(基于客户端)</title>
<script language="javascript">
var dataXml;
var pagingXsl;
var xslt;
var xslDoc
var xslProc;
var recordsPerPage = 5; //每页显示的纪录的行数
var currentPageNumber = 1; //当前显示的页码
function window.onload(){
dataXml = new ActiveXObject("Microsoft.XMLDOM");
dataXml.async = false;
dataXml.load("data.xml");
xslt = new ActiveXObject("Msxml2.XSLTemplate");
xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
xslDoc.async = false;
xslDoc.resolveExternals = false;
xslDoc.load("paging.xsl"); xslt.stylesheet = xslDoc;
xslProc = xslt.createProcessor();
xslProc.input = dataXml;
this.initPagingNavigator();
xslProc.transform();
pagingDiv.innerHTML = xslProc.output;
}
function initPagingNavigator() {
var totalRecords = dataXml.selectNodes("/*/*").length;
var totalPageNumber = totalRecords/recordsPerPage;
if(totalPageNumber.toString().indexOf(".") == -1) {
if(totalPageNumber== 0) {
totalPageNumber= 1;
}
}
else {
totalPageNumber= new Number(totalPageNumber.toString().substring(0,totalPageNumber.toString().indexOf("."))) + 1;
}
var temp = currentPageNumber/10+0.4;
var beginPage = Math.round(temp)*10-(10-1);
var endPage = Math.round(temp)*10;
if(endPage > totalPageNumber) {
endPage = totalPageNumber;
} //alert(beginPage+"--"+endPage);
//alert("totalPageNumber:"+totalPageNumber);
//alert("totalRecords:"+totalRecords); xslProc.addParameter("totalRecords", totalRecords);
xslProc.addParameter("totalPageNumber", totalPageNumber);
xslProc.addParameter("recordsPerPage", recordsPerPage);
xslProc.addParameter("currentPageNumber", currentPageNumber);
xslProc.addParameter("beginPage", beginPage);
xslProc.addParameter("endPage", endPage);
}
function jumptoPage(pageNumber) {
setCurrentPageNumber(pageNumber);
initPagingNavigator();
xslProc.transform();
pagingDiv.innerHTML = xslProc.output; } function sortField(fieldName){
var sortNode = xslDoc.selectSingleNode("//xsl:sort/@select");
var sortNodeAttr = xslDoc.selectSingleNode("//xsl:sort/@order");
/*
if(sortNodeAttr.value == "ascending") {
alert("1")
sortNodeAttr.value = "descending";
}
else {
sortNodeAttr.value = "ascending";
}
sortNode.value = "/" + fieldName;
xslt.stylesheet = xslDoc;
xslProc = xslt.createProcessor();
xslProc.input = dataXml;
this.initPagingNavigator();
xslProc.transform();
pagingDiv.innerHTML = xslProc.output;
*/
//alert(fieldName);
//alert(xslDoc.selectSingleNode("//xsl:sort/@select").value);
} function setRecordsPerPage(recordsPerPage) {
this.recordsPerPage = recordsPerPage
} function setCurrentPageNumber(currentPageNumber) {
this.currentPageNumber = currentPageNumber;
}
</script>
<link rel="stylesheet" type="text/css" href="paging.css">
</head>
<body>
<div align="center">
<div id="pagingDiv">
</div>
</div>
</body>
</html>
<list-set>
<list>
<ID>1</ID>
<用户名>张三</用户名>
<IP>192.168.0.1</IP>
<日期>2002-12-11 5:16:28</日期>
<电子邮件>test</电子邮件>
<备注>why not me?</备注>
</list>
<list>
<ID>2</ID>
<用户名>李四</用户名>
<IP>192.168.0.2</IP>
<日期>2002-12-11 22:24:16</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>3</ID>
<用户名>王五</用户名>
<IP>192.168.0.3</IP>
<日期>2002-12-12 23:24:37</日期>
<电子邮件>[email protected]</电子邮件>
<备注>blood is red</备注>
</list>
<list>
<ID>4</ID>
<用户名>郭六</用户名>
<IP>192.168.0.4</IP>
<日期>2002-12-12 23:25:58</日期>
<电子邮件>fffffffff</电子邮件>
<备注>ffffffffffff</备注>
</list>
<list>
<ID>5</ID>
<用户名>李鸿</用户名>
<IP>192.168.0.5</IP>
<日期>2002-12-11 5:16:28</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>6</ID>
<用户名>苏素奎</用户名>
<IP>192.168.0.6</IP>
<日期>2002-12-11 22:24:16</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>7</ID>
<用户名>欧库歌</用户名>
<IP>192.168.0.7</IP>
<日期>2002-12-12 23:24:37</日期>
<电子邮件>[email protected]</电子邮件>
<备注>blood is red</备注>
</list>
<list>
<ID>8</ID>
<用户名>彗尔图</用户名>
<IP>192.168.0.8</IP>
<日期>2002-12-12 23:25:58</日期>
<电子邮件>fffffffff</电子邮件>
<备注>ffffffffffff</备注>
</list>
<list>
<ID>9</ID>
<用户名>苟流动</用户名>
<IP>192.168.0.9</IP>
<日期>2002-12-11 5:16:28</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>10</ID>
<用户名>郑流股</用户名>
<IP>192.168.0.10</IP>
<日期>2002-12-11 22:24:16</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>11</ID>
<用户名>Jack</用户名>
<IP>192.168.0.11</IP>
<日期>2002-12-12 23:24:37</日期>
<电子邮件>[email protected]</电子邮件>
<备注>blood is red</备注>
</list>
<list>
<ID>12</ID>
<用户名>Mike</用户名>
<IP>192.168.0.12</IP>
<日期>2002-12-12 23:25:58</日期>
<电子邮件>fffffffff</电子邮件>
<备注>ffffffffffff</备注>
</list>
</list-set>
但可以使用JS客户端进行排序,(上面好像已经给出例子)
也可以使用xalan服务器端排序。用法到这去看
http://xml.apache.org/xalan-j/index.html
进入数据库->生成XML->Over。
^^^^^^^这一步竟然是由用户触发的,如果正好用户没完做就……404了!
检索获取流程:
通过ID直接将用户转送到XML文件。
^^^^也不先看看这个文件是不是存在??!!删除流程
先删数据库记录->有时好像不删文件。
^^^^^^^^^^^^^^怎么想都应该后删记录的!