получение данных от угловой JS

0

Я пытаюсь получить данные от серверного сервера в угловом. У меня есть сервлет Java, который извлекает данные из базы данных на основе поля ввода html и возвращает ответ.

<!DOCTYPE html>
<html ng-app="myApp" >
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
        <link rel="stylesheet" href="style.css" />
        <script>
            "use strict";
            var app = angular.module('myApp', []);

            app.controller('MainCtrl', function ($scope) {
                $scope.cityArray = ["hyderabad", "secunderabad", "delhi", "mumbai"];
                $scope.submit = function ($event) {
                    if ($scope.myForm.$invalid) {
                        // Or some other update
                        $scope.myForm.$submitted = true;
                        $event.preventDefault();
                    }
                };
            });
            app.directive('uniqueUsername', function ($http) {
                return {
                    restrict: 'A',
                    require: 'ngModel',
                    link: function (scope, element, attrs, ngModel) {
                        element.bind('blur', function (e) {
                            ngModel.$setValidity('unique', true);

                            $http.post('CheckUserName.do', element.val()).success(function (data) {
                                if (data) {
                                    ngModel.$setValidity('unique', false);
                                }
                            });
                        });
                    }
                };
            });
        </script>
    </head>
    <body ng-controller="MainCtrl">
        <h2 class="text-muted">Registration form</h2>
        <div>
            <form name="myForm" action="RegistrationServlet.do" method="POST" novalidate>
                First name:<input type="text" class="form-control input-sm" name="uname" ng-pattern="/^[a-zA-Z]{3,20}/" ng-model="uname" unique-username="" placeholder="First Name" required/>
                <span style="color:red" ng-show="myForm.uname.$error.pattern">First name cannot be less than 3 letters with no digits</span>
                <span style="color:red" class="error" ng-if="myForm.$submitted && myForm.uname.$error.required">Please fill field above<br></span><br/>
                <span style="color:red" class="hide-while-in-focus" ng-show="myForm.uname.$error.unique">Username already exist<br/></span>
                <button class="form-control btn btn-success" type="submit" ng-click="submit($event)">Submit</button>
            </form>
        </div>
    </body>
</html>

Проблема заключается в том, что request.getparameter("uname") всегда возвращает null. Прямо сейчас я вижу на консоли хром, что angularjs способен связываться с сервлетом, но ответ равен null, поскольку принятое имя пользователя равно null.

Здесь код сервлета Java:

public class CheckUserName extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("application/json");
        PrintWriter out = resp.getWriter();

        String username = req.getParameter("uname");
        System.out.println(username);

        try {
            Connection con = OracleDBConnection.getConnection();
            String selectQuery = "select FIRSTNAME from registration";
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(selectQuery);

            while (rs.next()) {
                String firstName = rs.getString("FIRSTNAME");
                if (username.equalsIgnoreCase(firstName)) {
                    resp.getWriter().write("username already exist");
                    req.setAttribute("errMsg", "username already exist");
                    RequestDispatcher rd2 = req.getRequestDispatcher("/index4.jsp");
                    rd2.forward(req, resp);
                } else {
                    resp.getWriter().write("username available");
//                    req.setAttribute("errMsg", "");
//                    resp.sendRedirect("EmailConfirmation.jsp");
                }
            }
        } catch (Exception e) {
            System.out.println("DB related Error");
            e.printStackTrace();
        }
    }
}
Теги:
servlets

3 ответа

0

Попробуй это,

        $http.post(url, {
         "uname": value
        }).
        success(function(data, status, headers, config) {
         //success
         }).
        error(function(data, status, headers, config) {
         //error
        });

Вход, который вы передаете службе, должен быть таким.

  • 0
    что такое "value" в " uname: value" ??
  • 0
    значение - это фактические данные, которые вы отправляете. В вашем случае это имя пользователя.
Показать ещё 4 комментария
0

Вы не указали имя параметра запроса в вызове метода:

   $http.post('CheckUserName.do', element.val()).success

Вам необходимо изменить следующую строку:

    $http.post('CheckUserName.do',{uname:element.val()}).success
  • 0
    Тем не менее он принимает это как ноль
  • 0
    Можете ли вы отладить и проверить, что вы получаете в element.val ()
Показать ещё 1 комментарий
0

$http.post() метод ожидает объект, а не строку. Попробуйте изменить свой код на:

$http.post('CheckUserName.do', {
    data:  "uname=" + element.val()
}).success(function (data) {
    if (data) {
        ngModel.$setValidity('unique', false);
    }
});
  • 0
    Тем не менее он принимает его как ноль. Вот ошибка: null java.lang.NullPointerException at com.In10s.CheckUserName.CheckUserName.doPost(CheckUserName.java:44)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню