欢迎光临
我们一直在努力

利用反射从XML构造VO-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

    反射使您的程序代码能够接入装载到 jvm 中的类的内部信息,允许你编写与执行时,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。        首先观察下面的 xml 文件:

 <?xml version = 1.0 encoding = gb2312?><root>   <arsubitem num="1">      <c_itemno>300200500009</c_itemno>      <c_itemname>20050112测试</c_itemname>      <c_subitemno>200543030000010</c_subitemno>      <c_subitemname>20010112标段2</c_subitemname>      <c_funcname>监督备案</c_funcname>   </arsubitem></root>

    该 xml 文件描述了一个标段当前流程信息,接下来把它翻译成 vo :

 public class bidprocess implements serializable{

 private string itemno; private string itemname; private string subitemno; private string subitemname; private string functionname;

 /**  * @return 返回 functionname。  */ public string getfunctionname() {  return functionname; } /**  * @param functionname 要设置的 functionname。  */ public void setfunctionname(string functionname) {  this.functionname = functionname; } /**  * @return 返回 itemname。  */ public string getitemname() {  return itemname; } /**  * @param itemname 要设置的 itemname。  */ public void setitemname(string itemname) {  this.itemname = itemname; } /**  * @return 返回 itemno。  */ public string getitemno() {  return itemno; } /**  * @param itemno 要设置的 itemno。  */ public void setitemno(string itemno) {  this.itemno = itemno; } /**  * @return 返回 subitemname。  */ public string getsubitemname() {  return subitemname; } /**  * @param subitemname 要设置的 subitemname。  */ public void setsubitemname(string subitemname) {  this.subitemname = subitemname; } /**  * @return 返回 subitemno。  */ public string getsubitemno() {  return subitemno; } /**  * @param subitemno 要设置的 subitemno。  */ public void setsubitemno(string subitemno) {  this.subitemno = subitemno; }}

    从 xml 构造 vo ,放入 list 中,代码如下:

 public class vofactory {

 // 构造出的对象集合 private arraylist list=new arraylist();  /** 利用反射获取结果集  */ public list parse(serializable source, string xml){  try{   //构造 xml 输入流   bytearrayinputstream ba=new bytearrayinputstream(xml.getbytes());   //dom4j 初始化   saxreader reader = new saxreader();   document document = reader.read(ba);   element root = document.getrootelement();   //获得类对象   class c = source.getclass();   //获得构造函数   constructor[] cons=c.getdeclaredconstructors();   constructor con=cons[0];   //获得类中的字段   field[] fields = c.getdeclaredfields();   //设置访问private字段的权限   accessibleobject.setaccessible(fields,true);   //以特定名称获得 xml 元素列表   list lis = root.elements("arsubitem");   //"arsubitem"元素下的子元素   for(int i=0;i<lis.size();i++){    element element=(element)lis.get(i);    iterator iter=element.elementiterator();    //从构造函数实例化对象    serializable localobj=(serializable)con.newinstance(null);    //按照字段个数循环    int j=0;    while(iter.hasnext()){     element e=(element)iter.next();     fields[j].set(localobj,e.gettext());     j++;    }    list.add(localobj);   }  }catch(exception e){   e.printstacktrace();  }  return list; }}

    通过对以上代码原形进行修改,可实现分页、结果集嵌套等需求。在写作本文时,我偶然发现了 jakarta commons beanutils 也提供了类似的功能。那么本文就作为一个了解反射的范例罢了。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 利用反射从XML构造VO-JSP教程,Java技巧及代码
分享到: 更多 (0)