当我们指定了一个想要的JavaBean对象后,BeanUtils工具类可以一次性地从客户端传过来的所有参数中选择该JavaBean类setXxx()方法中,与xxx同名的参数封装到该JavaBean对象中返回,如果某个setYyy()方法中对应的yyy属性不在客户端传进来的参数名中,则设置为 null 返回。
举个例子,当我们做用户登录、用户注册模块时,我们都需要使用 req.getParameter() 把 username 和 password 等信息封装到一个 User 的JavaBean中传给 UserService 服务层进行处理。那么,我们在每一个功能中都要写类似于这种代码:
protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); // 获得其他属性... userService.login(new User(username, password, ...)); }
这个步骤非常麻烦,我们可以直接使用一个BeanUtils工具包,来辅助我们完成封装这个过程。
BeanUtils 工具包不是 Jdk 提供的类,而是第三方提供的,因此需要我们导入 jar 包进工程中:commons-beanutils-1.8.0.jar 和 其依赖的 jar 包 commons-logging-1.1.1.jar 。
然后我们再在工程中的 utils 包下,自定一个 WebUtils 工具类,来使用 BeanUtils 给我们提供的方法:
public class WebUtils { public staticT copyParamToBean(Map value, T bean) { try { // populate() 方法可以将 req.getParameterMap() 返回的所有参数封装进JavaBean BeanUtils.populate(bean, value); } catch (Exception e) { e.printStackTrace(); } return bean; } }
那么,我们以后可以直接通过如下方法封装客户端发来的 JavaBean
protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { User user = WebUtils.copyParamToBean(req.getParameterMap(), new User()); userService.login(user); }
要求:客户端发来的标签的 name 值,必须和 JavaBean 中的属性名一致,BeanUtils 的 populate() 方法本质是利用字符串匹配结合反射机制,调用JavaBean中的 setXxx() 方法实现的,如果客户端传来的 getParameterMap() 中没有某一个属性,则默认为 null。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)