论坛首页 Web前端技术论坛

从XML到VO的通用实现问题

浏览 6148 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-11-11  
在讨论“XMLHTTP和浏览器端表现技术的讨论“上回贴,说会写个例子,再讨论。今天我差不多完成了,才发现我贴子被删了。好像不讨论那个问题了。

我根据上面所说的思路,用javascript写了一个表格组件,实现了以下功能:
1,用表格显示一个xml数据源
2,点击一个单元格,出现输入框供输入修改数据,焦点离开后,xml数据源修改。
3,删除一行记录,
3,添加一行记录,在末尾添加一个记录
4,服务端分页,把分页数据和显示数据放在同一个xml对象中
5,分页缓冲,每次读取数据库数据有3页发送到客户端xml数据源中。
6,提交数据,当修改完数据后,把修改过的数据,产生一个新的xml对象发送到服务端。由服务端解析这个xml对象。

基本上这个表格UI已经完成。在服务端解析时,有个问题,我总觉得很别扭。具体如下:

XML对象为:
<root>
<tr>
<td>asdf</td>
<td>asdf</td>
<td>asdf</td>
<td>asdf</td>
</tr>
</root>

java代码如下:

    Table table = null;
    for(Iterator i = root.elementIterator("tr");i.hasNext();) {
        table = new Table();
        Element e1 = (Element)i.next();
       
        List list = e1.elements();
        Element e2 = (Element)list.get(0);
        table.setWord1(e2.getTextTrim());
       
        e2 = (Element)list.get(1);
        table.setWord2(e2.getTextTrim());
       
        e2 = (Element)list.get(2);
        table.setWord3(e2.getTextTrim());
       
        e2 = (Element)list.get(3);
        table.setWord4(e2.getTextTrim());
    }
    return table;
   
XML<tr>节点下对应的数据虽然保存到了VO Table下。但是总觉得这样实现有问题。
由于XML的数据所对应的VO对象是不同的,对每个不同的VO都要重新解析xml对象。如何写一个公用的解析xml的组件呢?即使用了动态加载类来适应各种不同的VO,但是每个VO中的不同的setter方法也会让代码不统一啊。
各位有没有好的思路呢?
   发表时间:2004-11-11  
http://forum.iteye.com/viewtopic.php?t=8662

附件里面有一个简单而又粗陋的解决方法,
0 请登录后投票
   发表时间:2004-11-11  
最近我也考虑到这个问题,我用dom4j试了下:
package test;

import java.io.FileInputStream;
import java.io.InputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.xml.XmlBeanFactory;





public class TestXml {
public static void main(String[] argv) {
try {
InputStream is = new FileInputStream("Spring-Hibernate-Context.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);
EntityManager userDAO = (EntityManager)factory.getBean("entityManager");

Users user =(Users) userDAO.getEntityById(Users.class,new Integer(4));
Document document = DocumentHelper.createDocument();
Element root =document.addElement("dataset");

root.addAttribute("name",Users.class.getName());
Element u=root.addElement("Address");
//if(user.getUserAddress()!=null)
u.setText(user.getUserAddress());
System.out.println(document.asXML());
}
catch (Exception e){e.printStackTrace();}
}

}

<dataset name="test.Users"><Address>中国</Address></dataset>



我的思路是用做一个公用的类,然后通过xml配置文件来生成xml的内容。
用beanutils+dom4j能实现这个要求。
0 请登录后投票
   发表时间:2004-11-11  
Readonly 写道
http://forum.iteye.com/viewtopic.php?t=8662

附件里面有一个简单而又粗陋的解决方法,



运行不起来: javascript报错缺少talbe对象

我看了一下代码,这实现的是从VO->XML传输数据的过程。按照这种思路,把XML数据转换成VO的过程中,每个VO数据也是通过实现接口的方式来获得的话,实际上在每个VO获取数据时都重复用了相同的解析XML算法。

我的目的是:对于相同格式的XML对象,能不能抽象出一样统一的解析算法,以后任何相同格式的XML调用这个算法,就能获得相应的VO.
0 请登录后投票
   发表时间:2004-11-11  
你的浏览器版本是多少?
那个script需要IE5.5或者Firefox0.9以上

另, 才发现zzname的需求是XML -> VO, 没有看清楚就乱回帖, 该打......
0 请登录后投票
   发表时间:2004-11-11  
neuhawk 写道
最近我也考虑到这个问题,我用dom4j试了下:

我的思路是用做一个公用的类,然后通过xml配置文件来生成xml的内容。
用beanutils+dom4j能实现这个要求。


这个是用VO数据来构造xml对象的例子吧。还是从VO->XML,我还没有考虑过,但看了代码之后发现,这里和XML->VO同样有个通用性的问题。

如果对一个User对象有4个属性,另一个customer有5个属性,而且属性名可不一样。能写出一个程序,当输入一个VO时就产生一个相应XML对象吗?
我知道可以这样获得类名:
public Element voToXML(Object obj) {
String className =  obj.getClass().getName ();
}
但获得obj属性的方式就不解了
0 请登录后投票
   发表时间:2004-11-11  
package test;

import org.apache.commons.beanutils.PropertyUtils;


public class TestBean {

public static void main(String[] args) {
Employee emp=new Employee();
emp.setAddress("aaa");
emp.setFirstName("bbb");
emp.setLastName("ccc");
Company company=new Company();
company.setName("ddd");
company.setTel("33161221");
Order order =new Order();
order.setInfo("采购单");
company.setOrder(order);
emp.setCompany(company);


try{
String firstName = (String)PropertyUtils.getProperty(emp, "firstName");
PropertyUtils.setProperty(emp,"firstName","黄");
System.out.println("firstName="+firstName);
System.out.println("firstName="+emp.getFirstName());
String comname=(String)PropertyUtils.getProperty((Object)emp,"company.order.info");
                                       //任何obj都可以,不一定要知道具体javabean类型
System.out.println("company name = "+comname);
}
catch (Exception e){e.printStackTrace();}

}
}
0 请登录后投票
   发表时间:2004-11-11  
package test;

import org.apache.commons.beanutils.PropertyUtils;


public class TestBean {

public static void main(String[] args) {
Employee emp=new Employee();
emp.setAddress("aaa");
emp.setFirstName("bbb");
emp.setLastName("ccc");
Company company=new Company();
company.setName("ddd");
company.setTel("33161221");
Order order =new Order();
order.setInfo("采购单");
company.setOrder(order);
emp.setCompany(company);


try{
String firstName = (String)PropertyUtils.getProperty(emp, "firstName");
PropertyUtils.setProperty(emp,"firstName","黄");
System.out.println("firstName="+firstName);
System.out.println("firstName="+emp.getFirstName());
String comname=(String)PropertyUtils.getProperty((Object)emp,"company.order.info");
                                       //任何obj都可以,不一定要知道具体javabean类型
System.out.println("company name = "+comname);
}
catch (Exception e){e.printStackTrace();}

}
}
0 请登录后投票
   发表时间:2004-11-11  
neuhawk 写道
package test;

import org.apache.commons.beanutils.PropertyUtils;


public class TestBean {

public static void main(String[] args) {
Employee emp=new Employee();
emp.setAddress("aaa");
emp.setFirstName("bbb");
emp.setLastName("ccc");
Company company=new Company();
company.setName("ddd");
company.setTel("33161221");
Order order =new Order();
order.setInfo("采购单");
company.setOrder(order);
emp.setCompany(company);


try{
String firstName = (String)PropertyUtils.getProperty(emp, "firstName");
PropertyUtils.setProperty(emp,"firstName","黄");
System.out.println("firstName="+firstName);
System.out.println("firstName="+emp.getFirstName());
String comname=(String)PropertyUtils.getProperty((Object)emp,"company.order.info");
                                       //任何obj都可以,不一定要知道具体javabean类型
System.out.println("company name = "+comname);
}
catch (Exception e){e.printStackTrace();}

}
}


在企业信息化中,不同的角色对同一张表格是看到的view,所以用xml定义输出的比较方便。我没有用vo,直接xml<-->pojo.多表连接比较难处理。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics