我是AngularJS的初学者。我正在实现一个用于实践的CRUD应用程序。它有一个单独的学生表,包含姓名、密码、电子邮件和电话字段。我使用MySQL作为我的数据库。我的应用程序应按以下方式工作:HTML页面读取字段的值,并将这些值传递给controller.js,后者随后调用servlet。servlet随后连接到数据库并插入这些值。目前我正在使用$http.post()来调用servlet。这些值应该以JSON格式传递给servlet。
根据我所学到的,HTML表单中的值是使用$scope读取的。但表单元素的值在我的controller.js中为null。这是我的HTML文本输入元素:
<form name="regform" role="form" class="form-signin" action='InServlet'>
<input type="text" class="form-control" id="n1" name="name" placeholder="Enter Name"
ng-model="std.name" ng-model-instant required autofocus/>
<input type="password" class="form-control" id="n2" name="pwd" placeholder="Enter Password" required ng-model="std.pwd" ng-model-instant maxlength="8"/>
<input type="email" class="form-control" id="n3" name="mail" placeholder="Enter Email" required ng-model="std.mail" ng-model-instant />
<input type="text" class="form-control" id="n4" name="phone" placeholder="Enter Phone" required minlength="10" maxlength="14" ng-model="std.phone" ng-model-instant />
<button name="save" id="save" type="submit" class="btn btn-md btn-primary"
ng-disabled="regform.$invalid"
ng-Click="callInHttp(std)">
</form>
这里是controller.js,我在这里读取的值
angular.module('appcontrollers', [])
.controller('MyCtrl2', ['$scope','$http', function($scope,$http,jsonFilter)
{
$scope.callInHttp=function($scope,std)
{
alert("std:"+$scope.std); -->THIS DISPLAYS UNDEFINED
.....
/**CODE to call servlet**/
}
}
浏览器日志中的错误显示:"未捕获的类型错误:无法读取未定义的属性'notice'"。
我需要以下方面的帮助:1) 请告诉我在阅读HTML表单输入值时哪里出错,以及应该如何更正。2) 我应该如何将angularjs中的HTML表单输入值转换为JSON格式?3) 如何将JSON数据发送到javaservlet?4) Servlet应该如何将JSON数据转换为字符串,以便将数据插入数据库?
任何帮助都将不胜感激。提前谢谢。
Angular不需要对表单执行操作。事实上,如果你加上它的角度,就会停止在表单上工作
删除action=""
并将其更改为ng-submit="callInHttp()"
。然后,您可以在函数中使用this
来访问表单中的数据,即this.std.name
。
我认为您不需要jsonFilter。当您将对象作为数据传递给$http时,它会将其转换为JSON。
我不知道servlet是什么意思——你指的是服务器上的脚本?这本身就是另一个问题(与angular无关),但是您的JSON将在例如脚本的$_POST变量中可用。
您应该查看angular服务和工厂。这是您应该做ajax工作的地方,而不是从控制器。
以下是您需要的澄清:
-
请告诉我在阅读HTML表单时哪里出错了输入值以及我应该如何更正。
请参阅互联网上的教程,了解有关表单提交的更多信息。本教程内容丰富。
-
我应该如何在中将HTML表单输入值转换为JSON格式angularjs?和
-
如何将JSON数据发送到javaservlet?
当您使用
$http
服务传递GET
或POST
方法时,请求可以以JSON结构本身发送。例如,一个post请求看起来是这样的:$http({ url: "URL", method: "POST", data: { 'param1' : param1value, 'param2' : param2value}).success(function(data){..})
请注意,作为输入传递的
data
必须与它所映射到的对象的方式完全相似。这是请求到对象的正确JSON映射所必需的。 -
Servlet应该如何将JSON数据转换为字符串,以便将数据插入数据库?
您可以使用
GSON
库进行此转换。示例:Gson gson = new Gson(); // get the JSON request into a StringBuilder object StringBuilder requestContent = new StringBuilder(); BufferedReader reader = request.getReader(); try { String line; while ((line = reader.readLine()) != null) { requestContent.append(line).append('n'); } } finally { reader.close(); } // transform the input JSON request into YOUR_OBJECT object userDetails = gson.fromJson(requestContent.toString(), YOUR_OBJECT.class);
在本例中,
YOUR_OBJECT
是要将JSON请求映射到的对象。如前所述,JSON请求的结构(如对象中变量的名称将与前端从$http
服务传递的参数相同)必须与对象的结构完全相似。否则映射将无法正常工作。有关
Gson
的详细信息,请参阅此。