项目中,往往有从表单到值对象的映射。
以下是一个通用的类:
public class ObjectMapping
{
/**
* 映射html表单为对应的vo对象,当前可以映射String,int,double,boolean,float
* @param 对应的vo对象
* @param request HttpServletRequest
* @return 映射后的对象
*/
public static Object mappingFieldsToObject(Class c, HttpServletRequest request)
{
// 得到所有的请求参数
Enumeration enums = request.getParameterNames();
Object o = null;
try
{
o = c.newInstance();
}
catch (InstantiationException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (IllegalAccessException e1)
{
e1.printStackTrace();
}
// 从JavaBean中得到所有的方法
Method[] methods = c.getDeclaredMethods();
String tem1 = "";
while (enums.hasMoreElements())
{
tem1 = (String) enums.nextElement();
if (tem1 != null && !"".equals(tem1))
{
String methodName = "set" + tem1.substring(0, 1).toUpperCase();
if (tem1.length() > 1)
{
methodName += tem1.substring(1);
}
for (int i = 0; i < methods.length; i++)
{
if (methodName.equals(methods[i].getName()))
{
Method method = methods[i];
if (method.getParameterTypes()[0] == String.class)
{
String param = null2String(request
.getParameter(tem1));
try
{
method.invoke(o, new Object[]{param});
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("注入值时出错");
}
}
else if (method.getParameterTypes()[0] == int.class)
{
String param = null2Zero(request.getParameter(tem1));
Integer intParam = null;
try
{
intParam = Integer.valueOf(param);
}
catch (NumberFormatException e1)
{
intParam = new Integer(0);
}
try
{
method.invoke(o, new Object[]
{
intParam
});
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("注入值时出错");
}
}
else if (method.getParameterTypes()[0] == float.class)
{
String param = null2Zero(request.getParameter(tem1));
Float floatParam = null;
try
{
floatParam = Float.valueOf(param);
}
catch (NumberFormatException e1)
{
floatParam = new Float(0.0F);
}
try
{
method.invoke(o, new Object[]
{
floatParam
});
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("注入值时出错");
}
}
else if (method.getParameterTypes()[0] == double.class)
{
String param = null2Zero(request.getParameter(tem1));
Double doubleParam = null;
try
{
doubleParam = Double.valueOf(param);
}
catch (NumberFormatException e1)
{
doubleParam = new Double(0);
}
try
{
method.invoke(o, new Object[]
{
doubleParam
});
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("注入值时出错");
}
}
else if (method.getParameterTypes()[0] == boolean.class)
{
String param = null2String(request
.getParameter(tem1));
if (!"true".equals(param))
{
param = "false";
}
Boolean booleanParam = Boolean.valueOf(param);
try
{
method.invoke(o, new Object[]
{
booleanParam
});
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("注入值时出错");
}
}
break;
}
}
}
}
return o;
}
private static String null2Zero(String str)
{
if (str == null || "".equals(str.trim()))
{
return "0";
}
return str.trim();
}
private static String null2String(String str)
{
if (str == null)
{
return "";
}
return str.trim();
}
}
分享到:
相关推荐
Spring MVC的模型绑定功能可以自动将请求参数映射到VO对象的属性上,简化了开发工作。 接着,我们来谈谈"拦截器"。在Spring MVC中,拦截器(Interceptor)是一种预定义的处理程序,可以对请求和响应进行拦截,执行...
cn.itcast.elec.web.form:封装值对象(VO对象),对应页面传递的表单值的属性 junit:测试类 * 配置文件 放置到src的目录下: beans.xml:spring的配置文件 hibernate.cfg.xml:hibernate的配置文件 struts....
然后,业务层的Bean处理业务逻辑,并通过DAO(数据访问对象)调用ORM(对象关系映射,如Hibernate)将数据持久化到数据库。 当用户查询信息时,Action会根据前端的输入(如全名)构建相应的查询条件,转换成PO,...
- **批量复制**:`copyProperties()`方法可以方便地将一个对象的所有属性值复制到另一个对象,极大地减少了代码量。 - **空值处理**:当尝试设置的属性值为null时,BeanUtils会自动跳过,不会抛出异常。 3. **...
2. **基于 Vo(Value Object)对象(Domain 对象)**:若需将多个相关属性封装到一个对象中,可以在 Action 类中创建一个域对象的引用,如 `User` 类。表单中使用 `name=user.context` 和 `name=user.no` 来绑定数据...
例如,在`main.jsp`中可以使用表单元素将数据提交到服务器,然后在Action类中通过`@ActionParams`注解或者getter/setter方法接收这些参数。 3. **ModelDriven模式**:这是Struts2提供的一种简化开发的模式,用于...
3. Action从ActionFormBean中提取数据,创建业务对象(VO或PO),并调用Spring管理的Service接口。 4. Service层执行业务逻辑,可能包括调用DAO来完成数据库操作。 5. DAO通过Hibernate API与数据库交互,完成数据的...
- **VO(ValueObject)**:值对象,用于封装数据,常用于数据传输。 - **DTO(DataTransferObject)**:数据传输对象,用于不同系统间的数据传递。 - **FormBean**:表单对象,用于处理表单数据。 3. **对象的...
在SSH框架中,数据的流动过程通常是这样的:JSP页面上的表单数据提交到Action,Action从ActionFormBean中获取数据,封装成VO(Value Object,值对象)或PO(Persistent Object,持久对象),然后调用Service层的方法...
- Action类处理表单数据,封装成VO或PO对象,调用由Spring管理的Service层。 - Service层执行业务逻辑,可能涉及到DAO层操作。 - DAO层通过Hibernate与数据库交互,执行SQL语句。 - Service层处理完后,将结果返回给...
在SSH框架整合中,数据流通常如下:用户在JSP页面上填写表单,数据通过ActionFormBean传递到Action,Action处理数据并创建VO(Value Object)或PO对象,然后调用Spring管理的Service。Service进一步调用DAO接口,DAO...
在Struts2中,通常将表单字段映射到Action类的属性,然后在Action类中定义验证规则。例如,创建一个`UserVO`类,包含用户名、密码等属性,然后在Action类中引用这个VO,进行对应的验证。 5. **TestVistor 文件** `...
4. **VO(值对象)**:用于数据传输的对象,可以是数据库表的映射。 5. **聚合VO**:当单据涉及主表和子表时,聚合VO封装了主表和一组子表的VO,用于表示单据的完整数据。 6. **UI工厂**:提供了单据开发的框架,...
- **继承ActionForm**:所有的表单VO类都需要继承自 `ActionForm` 类。 ```java public class UserForm extends ActionForm { private String username; private String password; // Getters and Setters ...
Hibernate提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制,大大减少数据访问的复杂度。Hibernate的主要作用是: * 提供从Java类到数据表的映射 * 提供数据查询和恢复等机制 * 将对数据库的直接操作,...
2. 读取(Read):通常通过ID查询数据,Action获取到数据后将其封装到VO或BO对象,然后转发到显示详情的JSP页面。 3. 更新(Update):用户编辑表单,提交后调用UpdateAction,Action会更新数据并保存。 4. 删除...
首先,"commons-scaffold.zip"包含了Struts框架中的公共模版或基础结构,它可能包含了一些常用的Action类、Form Bean、以及与业务逻辑交互的DAO(数据访问对象)和VO(值对象)。 Commons Scaffold是Struts中用于...
在架构流程中,用户提交表单后,Struts的Action从JSP接收FormBean,然后根据需要构建PO对象。Action不直接处理数据库操作,而是调用业务层的Business Bean。Business Bean负责业务逻辑,它可能根据需要转换或合并多...