struts的一个深入问题 这个问题好,,,我也刚学 struts ,不知道啊!! 我把它提前。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DynaValidatorForm是通过配置文件实现的,但没见有在程序代码中实现的方法,不过这一点可自己开发一个类来实现,具体的实际方法可参考DynaValidatorForm的方法。 在bean里包括所有要显示的字段,需要那个就get哪个 首先ActionForm囊括所有可能的字段其次利用反射原理可以取得所有用户在页面上输入的 字段名--值 对,把它们放在Map里,在Action里就随你取用了!^_^ 用map bean实现:1.在ActionForm中:暴露这样的两个方法:public Object getANameYouLike(String key);public void setANameYouLike(String key,Object value);2.在JSP中就可以这样使用标签了:<html:text property = "aNameYouLike(foo)"/>foo是可变的字符串 其实我觉得假如显示逻辑这么混乱的话,还不如重写页面,假如现在的确是省事了,但肯定会给以后的变更带来非常大的麻烦.个人认为,Struts中的ActionForm其实是可有可无的,验证嘛,现在的公司都有JavaScrip积累,可以不用,Action,本来就是个Servlet,可以不用,但是里面最有用的是基于Properties文件的I18N,这才是最有用的,所以假如不是支持国际化的话,Struts可以不用,完全可以用JSP+Servlet这种最基础的东西以提高性能.个人意见而已!我的意思绝对不是说Struts没用哈!千万不要骂我,我只是说要灵活运用而已 我调试Struts时报很多错误信息,我都不知道怎么办?郁闷,不知从何下手,是不是懂得深入才能调吧 在 formbean 里加 上你新加的 字段的 set/get 就可以了.... 不知道楼主输入框的名字随便变化是什么意思????反正不管在页面上动态的增加一个字段,还是减少一个字段,ActionForm要囊括你所有可能会出现的字段,也就是<html:text peoperty="this.Name"......这个this.Name定要出现在ActionForm里,数据库当冉也要包括所以可能会出先的字段,将此段代码放到你的ActionForm里,使用Apache的PropertyUtils工具包将获得用户在页面上输入的 名称--值 对的一个Map,在Action里只需调用XXXForm.getMap即可public HashMap getMap() { HashMap map = new HashMap(); Method[] methods = this.getClass().getMethods(); for (int i = 0; i < methods.length; i++) { try { if (methods[i].getName().startsWith("get") && !methods[i].getName().equals("getMap") && !methods[i].getName().equals("getServletWrapper") && !methods[i].getName().equals("getLog") && !methods[i].getName().equals("getMultipartRequestHandler") && !methods[i].getName().equals("getClass")) { Object value = PropertyUtils.getProperty(this, getFieldName(methods[i].getName())); if (value != null) { map.put(getFieldName(methods[i].getName()), value); } } } catch (Exception e) { e.printStackTrace(); } } 最好的解决办法就是将一个页面的全部字段都包含的ActionForm中这样问题就解决了如果你觉得不爽,你可以将写入到配置文件中,动态的生成 ActionForm不过这样效率会很低 我还没试动态actionForm 也不知道它怎么运行 但我敢肯定囊括所有字段是不可行的方法 哪位可以详细讲讲动态actonForm 比如说我有几十个价格输入框 都是同一性质的 应该怎么做 |javamy|.NET的const readonly在java中是不是以final代替,有示例代码 谢谢 用java如何获取对MS Server2005刚刚插入数据的ID值? IBM的面试题:接口中定义的变量 分析 spring , hibernate JPA where in查询的问题 HIBERNATE 的映射问题 juddi问题,BUSINESSENTITYVECTORY为何是空的? 求 java web 应用 部署 架构 求:好的j2ee架构的性能分析的资料? 急急急急急急急急急 struts 连接数据库的错误 请问怎么使用tomcat(最好详细一点)
其次利用反射原理可以取得所有用户
在页面上输入的 字段名--值 对,把它们放在Map
里,在Action里就随你取用了!^_^
1.在ActionForm中:暴露这样的两个方法:
public Object getANameYouLike(String key);
public void setANameYouLike(String key,Object value);2.在JSP中就可以这样使用标签了:
<html:text property = "aNameYouLike(foo)"/>
foo是可变的字符串
我的意思绝对不是说Struts没用哈!千万不要骂我,我只是说要灵活运用而已
郁闷,不知从何下手,
是不是懂得深入才能调吧
HashMap map = new HashMap();
Method[] methods = this.getClass().getMethods();
for (int i = 0; i < methods.length; i++) {
try {
if (methods[i].getName().startsWith("get")
&& !methods[i].getName().equals("getMap")
&& !methods[i].getName().equals("getServletWrapper")
&& !methods[i].getName().equals("getLog")
&& !methods[i].getName().equals("getMultipartRequestHandler")
&& !methods[i].getName().equals("getClass")) {
Object value = PropertyUtils.getProperty(this, getFieldName(methods[i].getName()));
if (value != null) {
map.put(getFieldName(methods[i].getName()), value);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
这样问题就解决了
如果你觉得不爽,你可以将写入到配置文件中,动态的生成 ActionForm
不过这样效率会很低