`
tmartin
  • 浏览: 104481 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

EFS+Struts2实战之grid Pane 解析XML实现数据交换

阅读更多
EFS+Struts2实战之grid Pane 解析XML实现数据交换
引言:EFSframe 是基于EXTJS的的优秀企业级开源框架(http://www.efsframe.cn/)个人选择这个的原因是“写后台的人不应该用太多时间写前台”,这也是EFS理念之一。下面进入主题
准备工作:1.EFS前台框架。
          2.XSTREAM.jar,将javaBean生成序列化XML(XML是EFS和后台的数据交换格式)可从官网上下。
          3.自己已经写好的Struts后台。
一、写Action
    import java.io.PrintWriter;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.thoughtworks.xstream.XStream;
import eco.cdut.protal.qa.bean.Question;
import eco.cdut.protal.qa.service.IQuestionService;

public class QuestionList extends ActionSupport{
private String outXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
private List<Question> qlist;
private HttpServletResponse response ;
@Resource
private IQuestionService questionService;
public HttpServletResponse getResponse() {
return ServletActionContext.getResponse();
}
public void outList() throws Exception{
qlist = questionService.getQueList(0, 1, 0, 0);
String strList = "";
XStream xs = new XStream();
xs.alias("Question", Question.class);
for(Question que : qlist){
strList = strList + xs.toXML(que);
}
outXML = outXML+"<QUERYINFO totalpages=\"1\" records=\""+qlist.size()+"\">"+strList+"</QUERYINFO>";
getResponse().setContentType("application/xml;charset=UTF-8");
PrintWriter out=getResponse().getWriter();
out.write(outXML);
    out.close();
}
}
二、配置文件
<action name="QuestionListAction" class="eco.cdut.protal.qa.action.QuestionList" method="outList">
</action>
这里不需要result因为这个ACTION用来让前台AJAX动态获取数据的
三、前台页面
注意头文件中一定要引用这四个文件:
(<link rel="stylesheet" type="text/css" href="<%=basePath%>css/ext-all.css" />
<link rel="stylesheet" type="text/css" href="<%=basePath%>css/efs-all.css" />
<script type="text/javascript" src="<%=basePath%>js/loadmask.js"></script>
<script type="text/javascript" src="<%=basePath%>js/efs-all.js"></script>


Body中的代码
<div xtype="grid" width="100%" height="440" pagingBar="true" onEfsRowclick="doRowClick()" border="false">
<div xtype="store" url="<%=basePath%>/QuestionListAction" autoLoad="true" height="100%">
<div xtype="xmlreader" fieldid="id" record="Question" totalRecords="QUERYINFO@records" height="100%">
<div name="id" ></div>
<div name="title"></div>
<div name="category_name"  mapping="category/name"></div>
</div>
</div>
<div xtype="colmodel">
<div header="编号" width="80" sortable="true" dataIndex="id"
align="center"></div>
<div header="标题" width="100" sortable="true"
dataIndex="title" align="center"></div>
<div header="分类" width="80" sortable="true"
dataIndex="category_name" align="center"></div>
</div>
</div>

上面三步就实现了数据
下面详细讨论下代码
1.Action中outList方法:
public void outList() throws Exception{
qlist = questionService.getQueList(0, 1, 0, 0);// questionService是我写的SSH中服务层接口,作用是根据参数从后台中获取数据库信息,此方法返回的是一个List
String strList = "";
XStream xs = new XStream();//这里是new一个XStream
xs.alias("Question", Question.class);//这步很重要,因为XStream默认序列化BEAN的XML是这样的:
如bean:org.martin.Person
Person{
private int id;
private String name;
省略seter&geter
}
Person per = new Person();
per.setId(1);
per.setName(“笑天猴”);
转换后
<org.martin.Person>
<id>1</id>
<name>笑天猴</name>
</org.martin.Person>
可以看出转换后,结构清晰,连类的路径都有(若有自定义类属性则没有包路径)。但问题就出现这里,由于在JavaScript里面”.”代表的是取某一个类的属性,所以EFS没法解析(或者说冲突)。这个还是 Enjsky_郭 发现的(他是EFS主要创始人)。看了下XStream的文档,原来XStream有很好的方法alias,顾名思义就是取别名,所以加上“xs.alias("Question", Question.class);”这样转换的XML中Bean节点名就是我替换的“Question”了。刚才的小例子就加上“xs.alias("Person", Person.class);”转换结果就变成
<Person>
<id>1</id>
<name>笑天猴</name>
</Person>
这就是我们想要的效果
前台record属性处要对应替换哦。

//下面是做一个字符串拼接,把遍历结果中的每个Bean转换成XML格式再拼接到一起
for(Question que : qlist){
strList = strList + xs.toXML(que);
}
//下面是加上XML的头属性,totalpages属性是指明页数,records是总共结果条数,由于这里只实现交换,这两个属性忽略
outXML = outXML+"<QUERYINFO totalpages=\"1\" records=\""+qlist.size()+"\">"+strList+"</QUERYINFO>";
getResponse().setContentType("application/xml;charset=UTF-8");//这句话也很重要,都懂的
PrintWriter out=getResponse().getWriter();
out.write(outXML);//输出已经准备好的XML,之前可以在控制台上打印下,这样心里有底,呵呵
    out.close();
}
2.前台页面就很简单了(因为使用了EFS嘛)
url 是获取XML的路径,这里就是开始写的配置的action了。
Id 应该列表是左边显示的序列号
Record 获取具体数据的节点,这里就是bean 的名字了
<div name="id" ></div> name 是BEAN的属性 可以使用别名 然后使用 mapping属性对应Bean属性
如这个:
<div name="category_name"  mapping="category/name"></div> category_name不是bean中属性名 而mapping中category/name 的意思是获取子节点category中name属性。所以要用”category/name”

然后再写一个colmodel 就OK。
运行结果:




总结:1.EFS做前台方便快捷,美观
2.GIRD 解析XML时节点名字一定要对应。节点名简洁,不应该有过多的符号。
3.感谢EFS团队的无私付出。
4.小弟将跟着前辈的脚步继续研究,也希望和大家讨论,我的邮箱tmartin@126.com ,这里有个EFS讨论群希望有更多朋友来讨论60750028 。
  • 大小: 73 KB
分享到:
评论
1 楼 enjsky 2010-07-19  
很好
学以自用

支持

相关推荐

    AD+EFS数据加密解密

    ### AD活动目录与EFS数据加密解密技术详解 #### 一、AD活动目录简介 AD(Active Directory)活动目录是Microsoft Windows Server操作系统中的目录服务组件。它为网络中的资源提供了一个集中管理和存储的方式,使得...

    Advanced EFS Data Recovery--证书密钥解密

    **高级EFS数据恢复——证书密钥解密技术详解** 在Windows操作系统中,尤其是NTFS文件系统下,EFS(Encrypting File System)是一种强大的文件加密机制,它为用户提供了一种安全存储敏感信息的方式。然而,当用户...

    【绿色软件】EFS 解密 工具 Advanced EFS Data Recovery V4.20 注册版

    2. **数据解密**:EFS加密的数据需要对应的密钥才能解密,如果丢失了密钥或者忘记了密码,数据将无法访问。Advanced EFS Data Recovery就是针对这种情况提供的一种解密工具。 3. **Advanced EFS Data Recovery**:...

    EFS备份 efs备份

    EFS(Encrypting File System)是Windows操作系统中的一个文件加密技术,主要在NTFS文件系统上运行,为用户提供了一种安全存储数据的方式。EFS备份是针对这些加密文件和文件夹进行的保护措施,目的是在数据丢失、...

    7100 efs.img

    【7100 efs.img】是一个针对特定型号智能手机,如三星Galaxy Note 2 (N7100) 的重要系统文件。EFS(Encryption File System)分区是Android设备中存储网络身份凭证、IMEI(国际移动设备识别码)、SIM锁等相关安全...

    EFS解密工具Advanced EFS Data Recovery V4.30注册版

    2. **恢复丢失的证书**: 如果用户失去了EFS证书,该工具会尝试从备份中恢复,或者查找其他可能存在的证书副本。 3. **支持多种恢复场景**: 包括但不限于用户账户被删除、硬盘故障、系统崩溃、恶意软件攻击等。 4. ...

    搜索EFS加密文件

    ### 搜索EFS加密文件——全面解析与应用 #### 一、EFS加密文件系统概述 **EFS(Encrypting File System)**,即加密文件系统,是微软自Windows 2000以来推出的用于增强NTFS文件系统安全性的一项重要功能。它能够直接...

    EFS秘钥解密,是目前最好用软件之一.rar

    **EFS(Encrypting File System)**是Windows操作系统中的一项安全特性,用于对NTFS文件系统中的文件和文件夹进行透明加密,确保数据在存储和传输过程中的安全性。EFS利用用户证书和私钥对文件进行加密,只有拥有...

    aefsdr efs解密工具

    在IT领域,efs解密工具是一种专门用于处理 Encrypting File System (EFS) 加密文件的软件。EFS是Windows操作系统内置的一种文件加密技术,它允许用户对个人文件和文件夹进行加密,确保数据在存储和传输过程中的安全...

    Advanced EFS Data Recovery4.2

    **高级EFS数据恢复4.2 - 解密加密文件的专业工具** 在Windows操作系统中,EFS(Encrypting File System)是一种内置的文件加密技术,用于保护用户的数据安全。当使用EFS加密文件时,只有拥有正确密钥的用户才能访问...

    efs文件解密

    EFS(Encrypting File System),即加密文件系统,是一种专为NTFS文件系统设计的数据加密技术,它允许用户对存储在本地硬盘上的数据进行加密处理,确保数据的安全性。EFS主要用于保护静态数据,即存储在硬盘上的数据...

    jsp extjs Efs管理系统

    2. **数据绑定**:通过数据模型(Model)和数据视图(View)的绑定,实现UI和数据的实时同步。 3. **响应式设计**:EXTJS支持多设备和多屏幕尺寸,能自适应不同终端。 4. **强大的图表功能**:EXTJS提供多种图表组件...

    数据恢复 efs

    数据恢复在IT领域是一项至关重要的技术,特别是在意外丢失重要数据时。"efs"在这里指的是Windows操作系统的加密文件系统(Encrypted File System),它为用户提供了一种安全存储敏感信息的方式。当面临dbr(主引导...

    EFS_Pro_1.12.6_Release

    - 在EFS备份过程中,ADB可能被用来连接设备,执行备份命令,实现对EFS分区的读取和数据传输。 - ADB也可以用于恢复备份,将备份的EFS文件写回设备的相应分区。 4. 使用EFS Pro的步骤: - 安装EFS Pro.exe:在...

    配置EFS单板的以太网业务

    它支持安装于IU1、IU2或IU3槽位,具备接入4路10M/100M以太网业务的能力,并能实现业务汇聚、点对点透明传输以及二层交换等功能。本文将详细介绍EFS单板以太网业务配置的关键概念和技术细节。 #### TAG标识 TAG标识...

    Advanced EFS Data Recovery

    **高级EFS数据恢复工具详解** 在Windows操作系统中,尤其是从Windows 2000开始,引入了一项名为“ Encrypting File System”(EFS)的安全特性,用于对用户文件进行透明加密,确保数据安全。当文件被EFS加密后,...

    WXH 6种EFS加密技巧让数据更安全

    6种EFS加密技巧让数据更安全

    三星7100EFS

    三星7100EFS是针对三星Galaxy Note 2(型号N7100)的一个关键组件,主要涉及手机的基带系统。基带,或称无线电固件,是移动设备中负责处理无线通信的部分,包括蜂窝网络、Wi-Fi、蓝牙等。EFS(Encrypting File ...

Global site tag (gtag.js) - Google Analytics