2015-06-26 8 views
0

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

<!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") всегда возвращается нуль. Прямо сейчас я вижу на консоли хром, что angularjs способен связываться с сервлетом, но ответ равен null, поскольку принятое имя пользователя равно null.

Вот код Java Servlet:

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(); 
     } 
    } 
} 

ответ

0

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

$http.post('CheckUserName.do', { 
    data: "uname=" + element.val() 
}).success(function (data) { 
    if (data) { 
     ngModel.$setValidity('unique', false); 
    } 
}); 
+0

Еще не приняв его за нуль. Вот ошибка: 'нулевой java.lang.NullPointerException \t в com.In10s.CheckUserName.CheckUserName.doPost (CheckUserName.java:44)' – kittu

0

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

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

Вы должны изменить выше линии:

$http.post('CheckUserName.do',{uname:element.val()}).success 
+0

Тем не менее она принимает его утратившим – kittu

+0

Вы можете отладить и проверить, что вы получаете in element.val() –

+0

В хром-консоли, он показывает имя пользователя, но когда дело доходит до сервлета, он говорит null – kittu

0

Try это,

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

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

+0

что такое '' значение '' in '' uname: value "' ?? – kittu

+0

Значение - это фактические данные, которые вы отправляете. В вашем случае это имя пользователя. –

+0

Проблема в том, что я могу отправлять данные с внешнего конца, но сервлет не может получить значение, как при использовании 'request.getParameter (« name »);' – kittu

Смежные вопросы