zoukankan      html  css  js  c++  java
  • 解决Spring Mvc中接受参数绑定重名的方法

    html页面

    <form method='post' action='url'>
         用户名 <input type='text' name='name'>
         用户id <input type='text' name='id'>
         食品名 <input type='text' name='name'>
         食品id <input type='text' name='id'>
         <input type='text' name='age'>
         <input type='text' name='price'>
    </form>

    实体类

    public class User{
       private String name;
       private String id;
       private Integer age;
       //getter 和setter
    }
    ----------------------------------
    public class Food{
       private String name;
       private String id;
       private Double price,
       //getter 和setter
    }

    controller

    @requestMap(value={'/order/book'})
    public string show(User u,Food f){}

    在上述情况下User 和food都不能得到正确的name和id,或者说更本得不到

     

    1.建立一个中间桥梁, 拆分有所的属性

    建立一个中间桥梁UserFoodDto对象

    public class UserFoodDto{
      private String uid; //用户id
      private String uname; //用户名
      private String fid; //食物id
      private String fname; //食物名称
      private Double price, //食物价格
      private Integer age; //用户年龄   
      //getter 和setter
    }

     修改前台页面的 name值

    <form method='post' action='url'>
      用户id <input type='text' name='uid'>
      用户名 <input type='text' name='uname'>
      食品id <input type='text' name='fid'>
      食品名 <input type='text' name='fname'>
      <input type='text' name='age'>
      <input type='text' name='price'>
    </form>

     controller

    @requestMapping(value={'/order/book'})
    public string show(UserFoodDto dto){
      //创建用户和食物实例
      User u = new User();
      Food f = new Food();
       //分别设置属性
      u.setUid(dto.getUid());
      f.setFid(dto.getFid());
      u.setName(dto.getUname());   f.setName(dto.getFname());   u.setAge(dto.getAge);   f.setPrice(dto.getPrice);   ..... }

     缺点是:如果数据量大,100百个字段,修改的地方很多,而且一个dto,拆分也很费力,因此不建议在数据量大的情况下使用

    2.使用桥连接,拆分冲突的属性

    前端页面

    <form method='post' action='url'>
      用户名 <input type='text' name='uname'>
      用户id <input type='text' name='uid'>
      食品名 <input type='text' name='fname'>
      食品id <input type='text' name='fid'>
      <input type='text' name='age'>
      <input type='text' name='price'>
    </form>

     中间桥梁类

    ---将冲突的字段专门建立一个javaBean
    public Class UFBridge{ 
      private String uname;
      private String uid;
      private String fname;
      private String fid;
    }

     controller

    @requestMapping(value={'/order/book'})
    public string show(User u,Food f,UFBridge ufb){
      u.setId(ufb.getUid);
      u.setName(ufb.getUname());
    
      f.setId(ufb.getFid);
      f.setName(ufb.getUname());
    }

     3.创建一个类包含User和Food

    vo对象

    public class UserFoodVo{
      private User user;
      private Food food;
      //省略getter和setter方法
    }

     前台页面

    <form method='post' action='url'>
      用户名 <input type='text' name='user.name'>
      用户id <input type='text' name='user.id'>
      食品名 <input type='text' name='food.name'>
      食品id <input type='text' name='food.id'>
      <input type='text' name='user.age'>
      <input type='text' name='food.price'>
    </form>

     controller

    @requestMapping(value={'/order/book'})
    public string show(UserFoodVo vo){}
  • 相关阅读:
    使用node.js搭建本地服务器
    使用Vue前端框架实现知乎日报app
    Echarts的使用
    [LeetCode] 642. Design Search Autocomplete System 设计搜索自动补全系统
    [LeetCode] 249. Group Shifted Strings 分组偏移字符串
    [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
    [LeetCode] 128. Longest Consecutive Sequence 求最长连续序列
    [LeetCode] 227. Basic Calculator II 基本计算器 II
    [LeetCode] 224. Basic Calculator 基本计算器
    [LeetCode] 117. Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
  • 原文地址:https://www.cnblogs.com/guo-rong/p/9464014.html
Copyright © 2011-2022 走看看