浏览 6148 次
锁定老帖子 主题:从XML到VO的通用实现问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-11-11
我根据上面所说的思路,用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方法也会让代码不统一啊。 各位有没有好的思路呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-11-11
http://forum.iteye.com/viewtopic.php?t=8662
附件里面有一个简单而又粗陋的解决方法, |
|
返回顶楼 | |
发表时间: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能实现这个要求。 |
|
返回顶楼 | |
发表时间:2004-11-11
Readonly 写道 http://forum.iteye.com/viewtopic.php?t=8662
附件里面有一个简单而又粗陋的解决方法, 运行不起来: javascript报错缺少talbe对象 我看了一下代码,这实现的是从VO->XML传输数据的过程。按照这种思路,把XML数据转换成VO的过程中,每个VO数据也是通过实现接口的方式来获得的话,实际上在每个VO获取数据时都重复用了相同的解析XML算法。 我的目的是:对于相同格式的XML对象,能不能抽象出一样统一的解析算法,以后任何相同格式的XML调用这个算法,就能获得相应的VO. |
|
返回顶楼 | |
发表时间:2004-11-11
你的浏览器版本是多少?
那个script需要IE5.5或者Firefox0.9以上 另, 才发现zzname的需求是XML -> VO, 没有看清楚就乱回帖, 该打...... |
|
返回顶楼 | |
发表时间: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属性的方式就不解了 |
|
返回顶楼 | |
发表时间: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();} } } |
|
返回顶楼 | |
发表时间: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();} } } |
|
返回顶楼 | |
发表时间: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.多表连接比较难处理。 |
|
返回顶楼 | |