zoukankan      html  css  js  c++  java
  • Spring框架Controller层(表现层)针对方法参数是Bean时HttpServletRequest绑定参数值问题解释

    在做项目的时候,有一个需求是将数据库中的信息封装到实体类返回到jsp界面
    传过来的参数只是实体类的id属性,然后根据id属性去查数据库,事情就是这样,然后
    结果遇到很奇怪的事情,在jsp页面中使用EL表达式取值,除了id字段,其他都是NULL

    先记录结论:
    分为两种情况
    一:方法参数use的引用值(假设地址:0x0011)在Controller层使用中未发生改变
    那么在这个方法中默认有一个req.setAttribute("类名首字母小写",use);
    注意:默认意思这边你写不写这个绑定在jsp页面都是可以取值的, 绑定值是这边的参数引用,绑定名是:类名首字母小写

    二:DispatcherServlet分析方法创建一个0x0011的对象赋给use, 方法在调用service层或者持久层时,因为接受调用的返回值而将use的引用值改变(假设改变为0x0022),那么有以下的结果
    根据反复测试:在DispatcherServlet中有默认的req.setAttribute("类名首字母小写",use);
    注意这边很关键:这边绑定的use的地址是0x0011(我大胆猜测是在DispatcherServlet中绑定的)
    根据spring框架执行流程分析知道:即使你再在controller中绑定"类名首字母小写",这样的绑定名,也会到DispatcherServlet中被覆盖掉
    

    我不知道讲的清不清晰,大家随便提问,笔者会用耐心去解释这样的结果,其次,如果有大牛能看懂spring源码给我点提示,就更好不过了

    表现层中主要代码(其中lis是已经注入的Service)
    @RequestMapping("/loginIn.do")
    public String loginIn(User use, HttpServletRequest req) {
    System.out.println(use);
    System.out.println("userName:" + use.getUserName());
    System.out.println("paddword:" + use.getPassword());
    use = lis.toLoginIn(use);
    System.out.println(use);
    return "success";
    }

    Service层中主要代码
    @Service("loginInService")
    public class LoginInServiceImpl implements LoginInService {
    @Resource(name="loginInDAO")
    private LoginInDAO lid;
    @Override
    public User toLoginIn(User user) {
    user = lid.loginIn(user);
    return user;
    }
    }

    持久层主要代码
    @Repository("loginInDAO")
    public class LoginInDAOImpl implements LoginInDAO {

    @Override
    public User loginIn(User user) {
    	user.setPassword("持久层");
    	return user;
    }
    

    }

    实体类主要字段(get/set省)
    public class User implements Serializable{
    private static final long serialVersionUID = -5298720181994382985L;
    private String userName;
    private String password;

  • 相关阅读:
    C# 删除指定目录下的所有文件及文件夹
    C# 数组集合分页 Skip Take
    MongoDB模糊查询 工具
    C# skip 重试执行代码段
    C# 加载配置文件
    消息队列MSMQ的使用
    C#中const和readonly的区别
    JSP页面中的tab页
    使用jquery获取单选按钮radio的值
    JSP页面获取下来框select选中项的值和文本的方法
  • 原文地址:https://www.cnblogs.com/chentging/p/7111811.html
Copyright © 2011-2022 走看看