NVelocity入门,为服务器与客户端传输xml数据,实现Ajax通信铺平
本来是打算学Velocity的,但自己懒得写原始的数据库连接并查询数据,又避免使用Hibernate、Spring等一大堆繁琐的配置(看来本人写Java代码时是有非ssh、ssj不下手的癖好。虽然这些技术在真正项目中可以带来一系列的好处,但现在我只是想知道怎么用Velocity,仅此而已),所以我选择从NVelocity开始学习(我以前封装了一个C#的GenericDaoSql类,超好用的呢,这样我就不必去管那些烦人的数据库连接什么的了,需要数据时,直接调用一个方法搞定,嘿嘿),接下来用Velocity应该也差不多吧,毕竟NVelocity是Velocity在.NET平台的一个实现。 StringBuilderusersXML=newStringBuilder(); //获取用户信息列表,烦人的sql语句了不见了,coding时是不是很舒服呢 List<UserInfo>users=userInfoDAO.SelectAll(); usersXML.Append("<userscount=""+users.Count+""title="使用字符串拼接的例子">"); foreach(UserInfouserinusers) { usersXML.Append("<user>") .Append("<name>").Append(user.Name).Append("</name>") .Append("<sex>").Append(user.Sex).Append("</sex>") .Append("<city>").Append(user.City).Append("</city>") .Append("</user>"); } usersXML.Append("</users>"); Response.Clear(); Response.ContentType="text/xml"; Response.Write("<?xmlversion="1.0"encoding="utf-8"?>"); Response.Write(usersXML.ToString()); Response.End();
<?xmlversion="1.0"encoding="utf-8"?> <userscount="用户人数"title="标题"> <!--要是可以在这边来个循环,把用户循环显示出来就好了--> <user> <name>用户名</name> <sex>性别</sex> <city>城市</city> </user> </users>
<?xmlversion="1.0"encoding="utf-8"?> #foreach($uin$ListUsers) #beforeall <userscount="$Count"title="$Title"> #each <user> <name>$u.Name</name> <sex>$u.Sex</sex> <city>$u.City</city> </user> #afterall </users> #nodata <users>暂无用户资料</users> #end
//获取到用户列表 IList<UserInfo>listUsers=UserInfoService.GetAllUsers(); //创建一个模板引擎 VelocityEnginevltEngine=newVelocityEngine(); //文件型模板,还可以是"assembly",则使用资源文件 vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER,"file"); //模板存放目录 vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,Server.MapPath("~/Template/")); vltEngine.Init(); //定义一个模板上下文 VelocityContextvltContext=newVelocityContext(); //传入模板所需要的参数 vltContext.Put("Title","NVelocity文件模板例子"); vltContext.Put("Count",listUsers.Count); vltContext.Put("ListUsers",listUsers); //获取我们刚才所定义的模板,上面已设置模板目录,此处用相对路径即可. TemplatevltTemplate=vltEngine.GetTemplate("users.xml"); //定义一个字符串输出流 StringWritervltWriter=newStringWriter(); //根据模板的上下文,将模板生成的内容写进刚才定义的字符串输出流中 vltTemplate.Merge(vltContext,vltWriter); //输出字符串流中的数据 Response.Write(vltWriter.GetStringBuilder().ToString()); 终于搞定了,是不是很简单。 是滴,难倒是不难,只是…… 别说了,不光你觉得烦,我都觉的有点烦人了,还是原来直接拼接字符串容易呀! 话虽这么说,但在真正的项目中还是会带来很多好处的,包括易维护性(老兄,写代码时,多替以后维护你代码的哥们着想着想呀。说不定那位哥们有一天会找上你家门找你算账的哦!有那么惨吗?维护的人知道有多惨,但你不知道维护的人有多惨……)。 代码包中包含了一个调用已编译dll中的模板的例子(user.xml模板已经被编译进dll中了,这样带来的好处是:以后你只需要将修改的dll覆盖掉原来的dll就可以了,大哥,组件化开发呀),代码差不多,我就不多说了,该说的我都说了,该你看了吧! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |