Struts2里面的 将页面数据自动填充到对象中是如何实现的?

发布于 2021-11-11 03:24:09 字数 3830 浏览 705 评论 6

最近想做一个demo,demo可以自动接收页面中提交的数据,并且将这些数据自动填充到对象的对应属,就和struts2里自己将表单 数据填充到对象一样,主要过程已经想清楚了,就是在一个地方 被卡住,就 是数据类型转换的时候,比如一个Person对象有String name,int age属性,从页面获取的数据不能直接设置到age里,报错说的是不是能将string 类型数据直接设置给int类型,代码如下 :

package com.whcss.demo.reg;

import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 注册 servelt
 *
 * @author com.whcss.wangkai
 *
 */
public class RegServlet extends HttpServlet {
    private static final long serialVersionUID = -5653561698430057918L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
//        String username = req.getParameter("username");
//        String password = req.getParameter("password");
//        String name = req.getParameter("name");
//        String age = req.getParameter("age");
//        Map<String,Object> params = req.getParameterMap();
//       
//        for(String key : params.keySet()){
//            req.setAttribute(key, req.getParameter(key));
//        }
//        req.setAttribute("username", username);
//        req.setAttribute("name", name);
        getPerson(req);
        String path = "/servlet/result_servlet01.jsp" ;
        req.getRequestDispatcher(path).forward(req, resp);
    }
    /**
     * 接收客户端数据,将数据设置到person中
     */
    protected void getPerson(HttpServletRequest req) {
        Class<?> clazz = Person.class ;
        Person per = new Person() ;
       
        Map<String,Object> params = req.getParameterMap();
       
        for(String key : params.keySet()){
            try {
                Field field = clazz.getDeclaredField(key);
                Class<?> type = field.getType(); //字段类型
                System.out.println(type.getName());
                field.setAccessible(true);
                Object value = req.getParameter(key);
                if(value !=null){
                    field.set(per, value);
                }
                field.setAccessible(false);
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            req.setAttribute(key, req.getParameter(key));
        }
        req.setAttribute("person", per);
    }
}

package com.whcss.demo.reg;

public class Person {

    private String username ;
    private String password ;
    private String name;
    private int age;
   
    public Person(){}

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
   
    public String toString(){
        String str ="姓名:%s,用户名:%s,年龄:%s,密码:%s" ;
        return String.format(str, name,username,age,password);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

浮生未歇 2021-11-12 05:13:28
BeanUtils.populate(bean, map);

用的BeanUtils,开源的,你可以看看源码,没记错的话,struts里面有用这个包。

因为看清所以看轻 2021-11-12 04:51:43
BeanUtils.populate(bean, map);

用的BeanUtils,开源的,你可以看看源码,没记错的话,struts里面有用这个包。

柳絮泡泡 2021-11-12 03:26:33
BeanUtils.populate(bean, map);

用的BeanUtils,开源的,你可以看看源码,没记错的话,struts里面有用这个包。

凯凯我们等你回来 2021-11-12 02:42:55

他是想实现Struts2里面的那功能

风柔一江水 2021-11-11 19:50:22

@Andre.Z: 想做一个DEMO实现struts2里 的对象自填充功能

陌若浮生 2021-11-11 15:39:54

Struts2 ? 那你怎么还自己写Servlet ? 难道你不该写Action 吗“?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文