`
ai2ming
  • 浏览: 1806 次
  • 性别: Icon_minigender_1
  • 来自: 河南
最近访客 更多访客>>
社区版块
存档分类
最新评论

在Struts中使用LazyValidatorForm处理List属性的问题

    博客分类:
  • Java
阅读更多
LazyValidatorForm中存在List属性的时候,目前在Struts 1.2.9的配置文件中无法配置List元素的类型,这样带来了两个问题:
1. Struts组装FormBean后,List里面的元素是DynaBean,使用BeanUtils.copyProperties从form复制到业务对象的时候,因为业务对象使用了List<T>这样的list元素,copyProperties就出错了。
2. 如果List的元素还嵌套有其他对象,如OrderItem里面还有一个Product的属性,在页面上使用的input元素,名字为product.id, 可以正常显示,但是表单提交的时候,Struts调用BeanUtils.populate 方法会报错,提示No bean specified。

第一个问题,可以覆盖List元素的set方法解决,遍历提交上来的List<DynaBean>对象,使用BeanUtils.copyProperties将dynaBean复制到对应的业务对象上面,虽然麻烦一点,也可以使用。

第二个问题中,如果对象不在List中,可以在LazyValidatorForm定义的时候声明一下对象的属性,但是List里面我就不知道如何处理了。

对于这两个问题,我查了一些资料,始终没有得到比较好的解决方法。最常用的方法是将List属性换成Array属性,这样就可以在LazyValidatorForm定义的时候声明Array元素的类型。
大家说说看,是否有更好的解决方法?
分享到:
评论
3 楼 supttkl 2008-04-15  
第一:首先确定为要使用Form呢?
   如果不使用validate和form验证,那么就不要使用form了
手工实现动态form
使用装饰器模式
public class DynaForm{
HttpServletRequest request=null;
public DynaForm(HttpServlet request){
this.request=request;
}
public String getString(String name){
return request.getString(name);
}
getInt
getDouble
getDate
..............
第二:重写BeanUtil

/**
   * 设置一个对象属性的值
   *
   * @param property 属性名称
   * @param target 目标对象
   * @param value 属性值
   */
  public final static void setValue(String property, Object target,
                                    Object value) {
    property = "set" + property;
    Method[] methods = (Method[]) cache.get(target.getClass());
    if (methods == null) {
      methods = target.getClass().getMethods();
      cache.put(target.getClass(), methods);
    }
    for (int i = 0; i < methods.length; i++) {
      if (property.equalsIgnoreCase(methods[i].getName())) {
        Class[] paramClass = methods[i].getParameterTypes();
        if (paramClass.length == 1) {
          try {
            methods[i].invoke(target, new Object[] {value});
          }
          catch (IllegalArgumentException ille) {
            throw ille;
          }
          catch (Exception ex) {
            logger.error(ex);
          }
        }
      }
    }
  }

public final static void populate(Object obj, Map map) {
    Set s = map.entrySet();
    Iterator it = s.iterator();
    while (it.hasNext()) {
      Map.Entry me = (Map.Entry) it.next();
      setValue(me.getKey().toString(), obj, me.getValue());
    }
  }

用的时候直接
BenUtils.populate(povo,form.getMap());
2 楼 boreas 2008-04-09  
我遇到第二个问题,也没有解决方法。希望能在这里找到答案。
1 楼 ai2ming 2008-04-09  
难道没人碰到这样的问题吗?
还是我表达的不清楚。

相关推荐

    提交多行数据到Struts的ActionForm的List属性中

    这里,我们为每个表单字段定义了一个动态的属性名,如`items[0].name`和`items[1].description`,这使得Struts在处理POST请求时能够将这些值映射到一个List类型的属性上。假设我们有一个名为Item的类,它有name和...

    用于struts中的一个LazyValidatorForm

    在Struts中,`LazyValidatorForm`是一个特殊的表单类,主要用于处理验证逻辑,特别是在大型应用中,为了提高性能,它采用懒加载的方式来执行验证规则。 `LazyValidatorForm`是Struts的Validator框架的一部分,该...

    struts1.2 from表单提交包含list的对象

    在处理业务逻辑时,Action可以对这个列表进行操作,如添加、删除、修改商品信息。处理完业务逻辑后,Action会决定跳转到哪个JSP页面来显示结果,这通常通过返回一个ActionForward来实现。 关于源码层面,我们可以...

    struts2 全局异常提示定义属性文件使用

    为了让错误信息与Action相关联,你可以在Action类中添加一个`FieldError`或`ActionError`,并在处理异常时将属性文件中的错误消息添加进去。这样,错误信息将在渲染错误页面时自动插入到模板中。 6. 使用拦截器: ...

    struts2 使用action属性接收中文参数(post提交)

    这篇名为“Struts2 使用action属性接收中文参数(post提交)”的博文可能讲述了如何在Struts2框架中正确处理中文POST请求。在处理中文参数时,主要涉及以下几个关键知识点: 1. **字符编码设置**: - 请求编码:...

    struts2迭代 Map List

    Struts2作为一款流行的Java Web框架,提供了丰富的标签库来简化视图层的开发,使得在JSP页面中处理数据变得更加便捷。在这个场景下,我们关注的是如何在Struts2中迭代Map和List对象。这两种数据结构在Web开发中经常...

    struts2对于checkboxlist的换行

    这篇博客讨论的是如何在Struts2中处理`checkboxlist`的换行问题,这在创建多列或美观的表单布局时非常有用。 `checkboxlist`在Struts2中通常与一个Action类中的属性关联,用于收集用户的多选数据。在HTML中,复选框...

    Struts上传,已经处理好乱码问题

    在Struts框架中,文件上传功能是常见的需求之一,尤其是在处理用户提交的表单数据时。然而,文件上传过程中可能会遇到编码问题,导致中文等非ASCII字符出现乱码。本篇文章将详细探讨如何在Struts中处理文件上传并...

    struts标签使用中文说明文档

    实践是最好的老师,不断尝试在项目中使用Struts标签,可以提升开发效率并保证代码质量。 总之,Struts标签库是Struts框架中强大的视图层工具,通过合理利用这些标签,开发者可以更高效地构建Web应用程序,同时,...

    Struts2属性文件详解

    该属性指定了是否允许在Struts 2标签中使用表达式语法,默认值为`true`,表示允许使用。 #### struts.devMode 此属性设定了Struts 2应用是否使用开发模式,默认值为`false`。当设置为`true`时,在应用出错时可以...

    struts处理中文乱码问题总结

    struts处理中文乱码问题总结struts处理中文乱码问题总结struts处理中文乱码问题总结struts处理中文乱码问题总结

    Struts中List里嵌套Map

    在处理复杂数据结构时,Struts框架提供了灵活的数据绑定能力,其中包括在List中嵌套Map的情况。这个主题主要涉及到如何在Struts的ActionForm或者Action类中接收并处理这种复杂的数据结构,以及在JSP页面上进行展示。...

    Struts2--为Action的属性注入值

    在Struts2中,Action类是处理用户请求的核心组件,它封装了业务逻辑。为Action的属性注入值是Struts2的一个关键特性,使得我们可以方便地从请求参数中获取数据并绑定到Action实例上,以便后续的业务处理。 这个特性...

    struts错误处理机制小例子

    7. **日志记录**:在处理异常时,记录详细的日志信息是必不可少的。Struts框架集成了Log4j或其他日志框架,可以帮助开发者跟踪和诊断问题。 8. ** strut2框架中的拦截器(Interceptor)**:Struts2引入了拦截器,...

    struts2标签使用例子

    - 在JSP页面中使用标签,如`s:textfield name="username"`绑定Action的username属性。 - 配置Struts2的配置文件(struts.xml或struts.properties),定义Action和结果。 通过以上介绍,我们可以看出Struts2标签库...

    Struts2+ajax+json返回list.docx

    在Web开发中,Struts2、Ajax和JSON的结合使用能实现异步数据交互,提高用户体验。本实例展示了如何在Struts2...同时,注意在处理JSON返回值时,确保正确解析和使用数据,避免出现“[object, object]”这样的错误提示。

    struts2的属性配置

    当在`web.xml`中设置了这些参数,它们将覆盖`struts.xml`和`struts.properties`中的相应配置,因此在实际应用中应谨慎处理。 **MVC架构的角色**: - **模型(Model)**:负责业务逻辑处理,与数据层交互,获取和...

    Struts2.0属性转换器的作用说明

    Struts2.0属性转换器(Converters)是框架中一个关键组件,它负责将用户输入的数据转换为Java对象的属性类型,确保数据在表单提交后能够正确地绑定到模型对象上。转换器机制的存在使得开发者可以自定义数据类型转换...

    struts2标签使用方法

    Struts2 允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂、多变的需求。 Struts2 标签分类 Struts2 标签库可以分为三大类:UI 标签、非 UI 标签和 Ajax 标签。 UI 标签 UI 标签主要用于生成 HTML ...

    Struts2 使用OGNL表达式

    这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来访问和修改对象的属性,甚至可以处理复杂的对象结构。以下是一些关于...

Global site tag (gtag.js) - Google Analytics