使用AngularJS和Spring MVC的表单值为Null

时间:2015-06-22 19:00:25

标签: angularjs spring-mvc

我正在构建一个使用Spring MVCAngularJS的简单应用程序。问题是表单的值即将到来null

代码在上面。

  

MockController.java

@Controller
public class MockController {

    private Logger log = LoggerFactory.getLogger(MockController.class);

     @RequestMapping("/mock")
        public String getSettingsPage(){
            return "mock";
        }   

      @RequestMapping(value = "/SubmitMock", method = RequestMethod.POST)
        public @ResponseBody String getMock(@RequestBody MockForm mockForm){ 

          StringBuilder reponseData = new StringBuilder();
            reponseData.append("Name1: "+ mockForm.getName1()+" ");
            reponseData.append("Name2: "+ mockForm.getName2()+" ");
            reponseData.append("Name3: "+ mockForm.getName3());

            log.debug(reponseData.toString());

            return reponseData.toString();

        }
    }
  

MockForm.java

public class MockForm {

private String name1;
private String name2;
private String name3;

public String getName1() {
    return name1;
}
public void setName1(String name1) {
    this.name1 = name1;
}
public String getName2() {
    return name2;
}
public void setName2(String name2) {
    this.name2 = name2;
}
public String getName3() {
    return name3;
}
public void setName3(String name3) {
    this.name3 = name3;
}

}
  

mock.jsp

<%@taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!doctype html>
<html>
<head>
<title>Settings</title>
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/workflow.css">
<link rel="stylesheet" href="css/upload.css">
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"> 
<link rel="shortcut icon" href="images/logo-small.png" />

</head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script type="text/javascript">
    var app = angular.module('formSubmit', []);

    app.controller('FormSubmitController',[ '$scope', '$http', function($scope, $http) {

            $scope.formData = {};
            $scope.headerText = 'AngularJS Post Form Spring MVC example: Submit below form';
            $scope.submit = function() {

                var formData = {
                        "name1" : $scope.name1,
                        "name2" : $scope.name2,
                        "name3" : $scope.name3,
                };

                var response = $http.post('http://localhost:8080/fire-fatca-web/SubmitMock.html', formData); //passing mockForm
                response.success(function(data, status, headers, config) {      
                    alert('Success!' + JSON.stringify({
                        data: $scope.formData //used formData model here
                    }) );
                    $scope.formData.push(data);
                });
                response.error(function(data, status, headers, config) {
                    alert("Exception details: " + JSON.stringify({
                        data: $scope.formData //used formData model here
                    }));
                })

            };
        }]);
</script>
<style>        
input.ng-invalid {    
    border: 2px red solid;
    }
</style>
<body data-ng-app="formSubmit">

    <div class="container">
    <div class="col-sm-8 col-sm-offset-2">


    <form data-ng-submit="submit()" name="myForm" data-ng-controller="FormSubmitController">
        <!-- novalidate prevents HTML5 validation since we will be validating ourselves -->
        <table border="1">
            <tr>
                <td colspan="2">
                    <label>Name Line 1:</label>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <div class="form-group">
                        <input type="text" name="name1" class="form-control" data-ng-model="formData.name1" required ng-Maxlength="40">
                        <p ng-show="userForm.name1.$error.required" class="help-block">Name is required.</p>
                        <p ng-show="userForm.name1.$error.maxlength" class="help-block">Maximum 40 characters</p>
                    </div>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <label>Name Line 2:</label>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <div class="form-group">
                        <input type="text" name="name2" class="form-control" data-ng-model="formData.name2" ng-Maxlength="40">
                        <p ng-show="userForm.name2.$error.maxlength" class="help-block">Maximum 40 characters</p>
                    </div>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <label>Name Line 3:</label>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <div class="form-group">
                        <input type="text" name="name3" class="form-control" data-ng-model="formData.name3" ng-Maxlength="40">
                        <p ng-show="userForm.name3.$error.maxlength" class="help-block">Maximum 40 characters</p>
                    </div>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <h4>You submitted below data through post:</h4>
                    <pre>Form data ={{formData}}</pre>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <!-- SUBMIT BUTTON -->
                    <button type="submit" class="btn btn-primary" ng-disabled="userForm.$invalid">Submit</button>
                </td>
            </tr>
        </table>
    </form>
    </div>
    </div>

</body>
</html>

问题是我在Submit点击mock.jsp mockForm.getName1(), mockForm.getName2() and mockForm.getName3() Null。{/ p>

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您的帖子应该发送mockForm参数填充formData,因为您的服务器方法要求mockForm具有您已经包含在formData中的各种类对象网址应为'/Mock/SubmitMock',而不是http://localhost:8080/fire-fatca-web/SubmitMock.html

<强>代码

$http.post('/Mock/SubmitMock', { 
    mockForm: formData
})