求交流

gdsatan 2013-11-01 10:44:58
<?xml version="1.0" encoding="UTF-8"?>
<body>
<username>${user.name}</username>
</body>

public class User{
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
}

现在有User的实例user,想要把xml里面的${user.name}用实例里面的值替换掉,有没有什么想法,求交流啊
其实就是想了解struts标签原理
...全文
140 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdsatan 2013-11-06
  • 打赏
  • 举报
回复
没有人回复了吗?
gdsatan 2013-11-05
  • 打赏
  • 举报
回复
嗯,楼上说的没错,但是反射那一块遇到点问题 因为目前的代码必须要知道传进来的user实例是User这个类的实例,我的意思是我在替换值的时候并不知道那个obj就是User类的实例,下面是我写的拙劣的代码 names可以理解为${user.name}解析为数组['user','name'],obj可以理解为User的实例,clz是User的类类型。 private static String getValue(String[] names, Object obj, Class clz) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { StringBuilder sb = new StringBuilder(names[0]); sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); String method = sb.toString(); Method m = clz.getMethod("get" + method); String[] arys = popAry(names); if(arys==null){ return m.invoke(obj) == null ? "" : m.invoke(obj).toString(); }else{ Object oo = m.invoke(obj); Class c = oo.getClass(); return getValue(arys,m.invoke(obj),c); } } 这代码在遇到${user.grade.name}['user','grade','name']就出错了,出错在else里面oo是空的, 我感觉我的思路有点不对,希望各位大神交流交流,我就是希望能像struts的标签那样,简单易用
致知Fighting 2013-11-01
  • 打赏
  • 举报
回复
1、 拿到文件 2、 顺序读文件,匹配${.*} 3、 把匹配成功的.*拿出来做分析,如果是user.name这种类型就直接反射调用user.getName() 4、 把${.*}表达式替换成刚才调用的结果 5、 返回结果文件
  • 打赏
  • 举报
回复
应该是解析XML文件 根据user.name 找到user对象 name字段通过反射调用getName得到对象里面的值最后设置到XML里面
我在想是这样的

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧