繁体   English   中英

带有 Angular.js 验证的 jsp 表单和 servlet

[英]jsp form and servlet with Angular.js validation

我尝试做一个jsp表单,它会在Angular.js验证之后吸引servlet

我有 3 个主要文件 -

默认.jsp

<!DOCTYPE html>
<html>
<head>
<!-- CSS -->
<link rel="stylesheet" href="css/bootstrap.min.css" />

<!-- JS -->
<script src="js/angular.js"></script>
<script src="js/app.js"></script>
</head>
<body ng-app="validationApp" ng-controller="mainController">
    <div class="container">

        <!-- =================================================================== -->
        <!-- FORM ============================================================== -->
        <!-- =================================================================== -->

        <!-- pass in the variable if our form is valid or invalid -->
        <form action="AfterFormServlet" method="POST" name="userForm"
            ng-submit="submitForm(userForm.$valid)" novalidate>

            <!-- FIRST NAME -->
            <div class="form-group"
                ng-class="{ 'has-error' : userForm.name.$invalid && !userForm.name.$pristine }">
                <label>First name</label> <input type="text" name="name"
                    class="form-control" ng-model="user.name"
                    ng-pattern="/^[a-z ,.'-]+$/i" required>
                <p ng-show="userForm.name.$invalid && !userForm.name.$pristine"
                    class="help-block">Enter a valid last first name.</p>
            </div>    
            <button type="submit" class="btn btn-primary">Submit</button>    
        </form>    
    </div>
</body>
</html>

AfterFormServlet.java

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AfterFormServlet
 */
@WebServlet("/AfterFormServlet")
public class AfterFormServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public AfterFormServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Hi");
    }

}

应用程序.js

// create angular app
var validationApp = angular.module('validationApp', []);

// create angular controller
validationApp.controller('mainController', function($scope) {

    // function to submit the form after all validation has occurred            
    $scope.submitForm = function(isValid) {

        // check to make sure the form is completely valid
        if (isValid) {
            alert('Thanks, your order was Sent');
        }
        else {
            alert('Invalid form');
        }

    };

});

运行它后,我进入表单,填写必填字段,单击submit ,即使验证失败,它也会进入 servlet。

如何使它工作?

更新:

遵循@ug_ 建议 -

<form action="" active="AfterFormServlet" method="POST" name="userForm"
             ng-submit="submitForm(userForm.$valid);" novalidate>

进行验证但没有进入servlet

和 -

<form action="AfterFormServlet" method="POST" name="userForm"
             ng-submit="submitForm(userForm.$valid);" novalidate> 

导致验证生效,但即使验证失败,它也会进入servlet

您的表单没有action属性,这意味着当使用ng-submit指令时,它将阻止导致表单不提交的默认行为。 关于它的信息在这里https://docs.angularjs.org/api/ng/directive/ngSubmit

使固定:

action=""属性添加到您的表单标签。

<form active="AfterFormServlet" action="" method="POST" name="userForm"
        ng-submit="submitForm(userForm.$valid)" novalidate>

另外我注意到你有一些名为active属性,我不确定这是否只是一个错误类型并且假设是action或者它是否与你正在进行的其他事情有关,那不是帖子的一部分。

编辑:在查看更多内容后,我认为您应该稍微修改一下代码。 不使用提交按钮类型,而是将提交行为发送到验证表单的函数似乎是一个更好的流程。 所以它看起来像这样:

$scope.submitForm = function(isValid) {

    // check to make sure the form is completely valid
    if (isValid) {
        alert('Thanks, your order was Sent');
        $scope.userForm.submit();
    }
    else {
        alert('Invalid form');
    }
};

和你的 html:

<!-- CHANGE HERE -->
<form action="AfterFormServlet" method="POST" name="userForm" novalidate>
    <!-- FIRST NAME -->
    <div class="form-group" ng-class="{ 'has-error' : userForm.name.$invalid &&  userForm.name.$pristine }">
        <label>First name</label>
        <input type="text" name="name" class="form-control" ng-model="user.name" ng-pattern="/^[a-z ,.'-]+$/i" required>
        <p ng-show="userForm.name.$invalid && !userForm.name.$pristine" class="help-block">Enter a valid last first name.</p>
    </div>    
    <!-- CHANGE HERE -->
    <button ng-click="submitForm(userForm.$valid)" class="btn btn-primary">Submit</button>    
</form> 

或者,您可以使用 angular 中的$http提供程序通过 AJAX 提交表单,并且它不会刷新页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM