Spring Web应用程序 - 获取表单数据 - 发布方法

时间:2016-07-24 10:34:28

标签: java html spring spring-mvc spring-data

我试图从Form参数到DTO对象,我点击按钮但没什么好笑的,似乎数据不是转移

为什么会这样?

Cntroller:

@RequestMapping(value = "/scanRequest", method = RequestMethod.POST)
public String scanRequest(@ModelAttribute("scanForm")UserRequestDTO userRequestDTO, BindingResult bindingResult, Model model) {

    if (bindingResult.hasErrors()) {
        return "home";
    }

    model.addAttribute("msg", userRequestDTO.getSellerName());


    return "home";
}

DTO:

public class UserRequestDTO {

    private String seller_name;

    public String getSellerName() {
        return seller_name;
    }

    public void setSellerName(String sellerName) {
        seller_name = sellerName;
    }
}

HTML表单:

<form:form method="POST" action="${contextPath}/requestlist" modelAttribute="scanForm" class="form-signin">
    <h2 class="form-signin-heading">Create your account</h2>
    <spring:bind path="seller_name">
        <div class="form-group ${status.error ? 'has-error' : ''}">
            <form:input type="text" path="seller_name" class="form-control" placeholder="Seller Name" autofocus="true"></form:input>
            <form:errors path="seller_name"></form:errors>
        </div>
    </spring:bind>

    <button class="btn btn-lg btn-primary btn-block" type="submit">Submit</button>
</form:form>

更新错误:

  

org.apache.jasper.JasperException:javax.servlet.ServletException:   javax.servlet.jsp.JspTagException:既不是BindingResult也不是普通的   bean名称'scanForm'的目标对象可用作请求属性

更新错误 - 2

  

org.apache.jasper.JasperException:   org.springframework.beans.NotReadablePropertyException:无效   bean类的属性'seller_name'   [com.searcher.model.UserRequestDTO]:Bean属性'seller_name'是   不可读或有无效的getter方法:是否返回类型   getter匹配setter的参数类型?

1 个答案:

答案 0 :(得分:2)

您的帖子入口点为/scanRequest,但是您提交给/requestlist,它会失败,因为您没有定位到正确的映射方法。

如果/requestlist是请求映射您的控制器(包含方法scanRequest的那个)而不是将您的表单更改为:

<form:form method="POST" 
action="${contextPath}/requestlist/scanRequest" 
modelAttribute="scanForm"  class="form-signin">...

如果不是,你的控制器

   <form:form method="POST" 
    action="${contextPath}/scanRequest" 
    modelAttribute="scanForm"  class="form-signin">...

修改

渲染包含表单的页面时,scanForm不存在,因此您必须添加它,将此方法添加到控制器:

@ModelAttribute("scanForm")
public UserRequestDTO getScanForm(){
  return new UserRequestDTO();
}

编辑2:

为您的模型添加正确的getter:

public String getSellerName() {
        return seller_name;
    }

这不是属性seller_name将其更改为

的正确getter
public String getSeller_name() {
    return seller_name;
}

让IDE自动生成它们。