【问题标题】:Number data is not binding in Spring MVC数字数据在 Spring MVC 中没有绑定
【发布时间】:2019-09-19 23:14:21
【问题描述】:

在开发基于 Spring MVC 的项目时,我正在尝试将数据从 JSP 绑定到模型。

虽然字符串数据由于某种原因完美绑定,但数字数据根本没有绑定。

我检查了POJO和JSP中的参数名称相同

下面是我的控制器代码

@RequestMapping(value = "/investor-signup", method = RequestMethod.GET)
    public String registration(Model model) {
        model.addAttribute("investor", new InvestorRegister());
        return "investor-signup";
    }

    @RequestMapping(value = "/investor-signup", method = RequestMethod.POST)
    public String registration(@ModelAttribute("investor") InvestorRegister investor, BindingResult bindingResult, Model model) {

        System.out.println(investor.getFULL_NAME());
        System.out.println(investor.getMOB_NO());

        investorRegisterService.save(investor);
        return "redirect:/login";
    }

下面是我的 JSP 代码

<form:form method="post" action="investor-signup"
        modelAttribute="investor" id="contact-form"
        style="padding-top: 40px;" role="form" class="formcss" align="left">    

        <div class="controls">    
            <div class="row">    
                <div class="col-md-12">
                    <div class="form-group">    
                        <div class="col-md-2 ">
                            <label for="user_name">Full Name *</label>
                        </div>
                        <div class="col-md-10 p0">
                            <input id="user_name" type="text" name="FULL_NAME" class="form-control" required="required" data-error="Full Name is required.">
                        </div>
                        <div class="help-block with-errors"></div>
                    </div>
                </div>

                <div class="col-md-12">
                    <div class="form-group">
                        <div class="col-md-2">
                            <label for="user_mobile">Mobile *</label>
                        </div>    
                        <div class="col-md-6 ">
                            <input id="user_mobile" type="number" name="MOB_NO" class="form-control" required="required" data-error="Mobile No is required.">
                        </div>
                        <div class="help-block with-errors"></div>
                    </div>
                </div>              

            <div class="col-md-12" align="center">
                <input type="submit" class="btn btn-success btn-send" value="Register">
            </div>    

        </div>    
    </form:form>

下面是我的模型POJO

@Entity
@Table(name = "InvestorRegister")
public class InvestorRegister {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_GEN")
    @SequenceGenerator(name = "SEQ_GEN", sequenceName = "IID_SEQ")
    @Column(name = "ID")
    private int ID;

    @NotEmpty
    @Column(name = "FULL_NAME")
    private String FULL_NAME;

    @Column(name = "MOB_NO")
    private int MOB_NO;

    public int getID() {
        return ID;
    }    
    public void setID(int iD) {
        ID = iD;
    }

    public String getFULL_NAME() {
        return FULL_NAME;
    }    
    public void setFULL_NAME(String fULL_NAME) {
        FULL_NAME = fULL_NAME;
    }

    public int getMOB_NO() {
        return MOB_NO;
    }    
    public void setMOB_NO(int mOB_NO) {
        MOB_NO = mOB_NO;
    }
}

虽然字符串数据由于某种原因完美绑定,但数字数据根本没有绑定

我检查了POJO和JSP中的参数名称相同

感谢任何帮助。

【问题讨论】:

    标签: java spring spring-mvc jsp data-binding


    【解决方案1】:

    @abhi314,您刚刚尝试过单独提取字段吗? 我的意思是你有没有尝试过这些方法来检查价值是否来自视图?

    public String registration(@RequestParam("FULL_NAME") String FULL_NAME, @RequestParam("MOB_NO") int MOB_NO) {
        //check value comes or not 
    }
    

    public String registration(@RequestBody InvestorRegister  ir) {
        //check value comes or not 
    }
    

    请务必让我知道您是否通过这种方式检查获得价值

    【讨论】:

    • 作为响应,您收到该字段?我的意思是你检查过 POSTMAN 还是浏览器?
    • 这不是 API 调用,而是 JSP 到 java 通过 spring MVC 绑定对象
    • 是的,没关系,但是您可以在使用开发者工具提交表单后在浏览器中检查否--> 网络选项卡?
    • 我通过上述方法收到“格式错误的请求”或“不支持的媒体类型”异常
    • 你能提供它的截图吗?浏览器控制台中的响应?它会给我一个清晰的想法
    【解决方案2】:

    您需要使用 Wrapper Integer 而不是 int

        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_GEN")
        @SequenceGenerator(name = "SEQ_GEN", sequenceName = "IID_SEQ")
        @Column(name = "ID")
        private Integer ID;
    

    我还建议使用命名约定标准。而不是 ID 声明 id 或最首选作为investorRegisterId。

    int 更改为Integer 后,请重新生成相同的getter/setter。

    您的实际问题是在 Java 自动装箱/拆箱的概念上失败。

    【讨论】:

    • 问题不在于 id(它将在提交时由数据库填充),而在于与 JSP 的数据绑定。虽然文本数据正确绑定但数字数据根本没有绑定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2015-09-01
    • 2012-04-29
    • 2012-12-23
    • 2011-10-23
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多