Angularjs调用java函数
我有一个简单的JAVA和angularjs web应用程序。用户可以在其中向应用程序添加人员,并将其从mongo数据库中删除 我的问题是,我不知道angular是如何与java通信和调用java函数的。例如,如果我想在单击按钮后从数据库中删除一个人 这里有一些代码 persons.htmlAngularjs调用java函数,java,javascript,angularjs,mongodb,Java,Javascript,Angularjs,Mongodb,我有一个简单的JAVA和angularjs web应用程序。用户可以在其中向应用程序添加人员,并将其从mongo数据库中删除 我的问题是,我不知道angular是如何与java通信和调用java函数的。例如,如果我想在单击按钮后从数据库中删除一个人 这里有一些代码 persons.html <a for-authenticated ng-click="remove(s.id)" href=""> <i class="pull-right glyphicon glyph
<a for-authenticated ng-click="remove(s.id)" href=""> <i
class="pull-right glyphicon glyphicon-remove"></i>
</a>
<html ng-app="personApp">
<body ng-controller=""personCtr>
<input type="submit" ng-click="getPersons()"/>
<input type="submit" ng-click="deletePerson(somePersonIdFromTableOrSomething)"
</body>
</html>
PersonService.js
var app = angular.module('conferenceApplication', [
'ngCookies',
'ngResource',
'ngSanitize',
'ngRoute',
'ui.bootstrap',
'angularFileUpload',
'ngQuickDate']);
app.config(function ($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: '/partials/home.html',
controller: 'HomeCtrl'
})
.when('/speakers', {
templateUrl: '/partials/person-list.html',
controller: 'PersonListCtrl'
})
});
app.controller('PersonListCtrl', function ($scope,$http, $modal, $log, $route, PersonService) {
$scope.remove = function(id) {
var deletedPerson = id ? PersonService.remove(id, function(resp){
deletedPerson = resp;
}) : {};
};
}
app.service('PersonService', function ($log, $upload, PersonResource) {
this.getById = function (id, callback) {
return PersonResource.get({personId: id}, callback);
};
this.remove = function(id, callback) {
return PersonResource.deleteObject({PersonId: id}, callback);
}
}
app.factory('PersonResource', function ($resource) {
return $resource('rest/person/:personId',
{
personId: '@personId'
},
{
'update': { method: 'PUT' }
})
(function() {
var app = angular.module('personApp',[]);
app.controller('personCtrl',function($scope,$http){
$scope.getPersons = function(){
$http.get('person/').success(function(response){
$scope.allPersons = response.data;
}).error(function(){
//handle error
})
};
$scope.deletePerson = function(personId){
$http.delete('person/'+personId).success(function(response){
$scope.deleteResponseStatus = response.status;
}).error(function(){
//handle error
})
}
})
})();
PersonResource.js
var app = angular.module('conferenceApplication', [
'ngCookies',
'ngResource',
'ngSanitize',
'ngRoute',
'ui.bootstrap',
'angularFileUpload',
'ngQuickDate']);
app.config(function ($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: '/partials/home.html',
controller: 'HomeCtrl'
})
.when('/speakers', {
templateUrl: '/partials/person-list.html',
controller: 'PersonListCtrl'
})
});
app.controller('PersonListCtrl', function ($scope,$http, $modal, $log, $route, PersonService) {
$scope.remove = function(id) {
var deletedPerson = id ? PersonService.remove(id, function(resp){
deletedPerson = resp;
}) : {};
};
}
app.service('PersonService', function ($log, $upload, PersonResource) {
this.getById = function (id, callback) {
return PersonResource.get({personId: id}, callback);
};
this.remove = function(id, callback) {
return PersonResource.deleteObject({PersonId: id}, callback);
}
}
app.factory('PersonResource', function ($resource) {
return $resource('rest/person/:personId',
{
personId: '@personId'
},
{
'update': { method: 'PUT' }
})
(function() {
var app = angular.module('personApp',[]);
app.controller('personCtrl',function($scope,$http){
$scope.getPersons = function(){
$http.get('person/').success(function(response){
$scope.allPersons = response.data;
}).error(function(){
//handle error
})
};
$scope.deletePerson = function(personId){
$http.delete('person/'+personId).success(function(response){
$scope.deleteResponseStatus = response.status;
}).error(function(){
//handle error
})
}
})
})();
}))
我还有一个java类,我想从数据库中删除这个人
PersonResource.java
@Controller
@RequestMapping("/person")
public class PersonResource {
@Autowired
private PersonService personService;
@RequestMapping(method = RequestMethod.GET, value = "/{id}")
public ResponseEntity<Person> deleteObject(@RequestBody Person id) {
Person person = personService.findById(id);
personService.deleteObject(id);
return new ResponseEntity<Person>(person, HttpStatus.ACCEPTED);
}
}
getTemplate()返回MongoTemplate
有人能告诉我从数据库中删除条目的错误吗?您需要单独解决这些问题。尝试单独测试您的rest服务。使用POSTMAN或任何其他REST客户机()并测试服务是否相应地运行。只有在成功时,才检查Javascript客户端(AngularJS代码),看看请求(头、参数和正文)是否与REST客户端生成的请求相同。因此,当使用GET方法时,我们通常会获取一些数据,如果我们想向服务器发送一些数据(例如,要删除的人的id),我们使用POST方法或DELETE方法,在我的示例中,我将使用POST方法进行简化。Angular和java通过RESTFUL服务(JAX-RS)进行通信,您不能在Angular js中调用java函数,反之亦然。我将展示获取数据和发送数据的简单示例(获取所有人员,删除具有给定id的人员) 以下是一个示例,您可以从中开始学习: Java个人控制器
@Controller
@RequestMapping(value = "/person")
public class PersonController{
private final PersonService personService;
@Autowired
public PersonController(final PersonService personService) {
this.personService= personService;
}
@RequestMapping(value = "/", method = { RequestMethod.GET })
@ResponseBody
public List<Person> getPersons() {
return personService.getPersons();
}
@RequestMapping(value = "/delete/{personId}", method = { RequestMethod.POST})
@ResponseBody
public HttpStatus deletePerson(@PathVariable final long personId) {
return personService.deletePerson(personId);
}
}
Html
<a for-authenticated ng-click="remove(s.id)" href=""> <i
class="pull-right glyphicon glyphicon-remove"></i>
</a>
<html ng-app="personApp">
<body ng-controller=""personCtr>
<input type="submit" ng-click="getPersons()"/>
<input type="submit" ng-click="deletePerson(somePersonIdFromTableOrSomething)"
</body>
</html>
您可以通过以下方式调用angularjs控制器中的java方法或服务:
app.controller('personCtrl',['$scope', '$http', function($scope, $http){
$scope.firstName = "John";
$scope.personList = [];
$scope.typelistload = function() {
$http.get(
'http://localhost:8080/SpringMVCHibernate/Person/getPersonList'
).success(function(data) {
$scope.personList = data;
}).error(function() {
ngToast.danger( "Some problem in Listing:");
});
};
}]);
RESTful Web服务用于与Java后端对话。您应该研究它(JAX-RS是JavaAPI的名称)并熟悉它。但是你忘了说你的问题是什么。你有错误吗?如果是这样的话,那是什么呢?对于那个代码,我有一个错误:SpeakerResource.deleteObject不是一个函数。所以是一个Javascript错误。但是,您没有发布SpeakerResourceJavaScript代码。在这一点上,我必须假设浏览器没有说谎,并且函数根本不存在。sry编辑了这一点。我现在觉得自己很笨,但是我怎么可能实现那个函数来告诉java删除那个人呢?我建议在这里查看文档,以获取Angular$resource:。还有关于如何创建自定义方法的文档,以防您需要实现自定义方法。@SiddhartRathi-关于我的问题的任何帮助,有点类似于您回答的任何帮助