我在JAVA和
angularjs中有一个简单的Web应用程序.用户可以将人员添加到应用程序并从mongo数据库中删除.
我的问题是,我不确切知道如何与java通信并调用Java函数.例如,如果我想在按钮单击后从我的数据库中删除一个人.
这是一些代码
persons.html
<a for-authenticated ng-click="remove(s.id)" href=""> <i class="pull-right glyphicon glyphicon-remove"></i> </a>
app.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; }) : {}; }; }
PersonService.js
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); } }
PersonResource.js
app.factory('PersonResource',function ($resource) { return $resource('rest/person/:personId',{ personId: '@personId' },{ 'update': { method: 'PUT' } })
});
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); } }
PersonRepository
@Override public void deleteObject(String id) { getTemplate().remove(new Query(Criteria.where("id").is(id)),Person.class); }
getTemplate()返回MongoTemplate.
解决方法
因此,使用GET方法通常,当我们获取一些数据,如果我们希望将一些数据发送到服务器(例如,一个ID为将要删除的人),我们使用POST方法或DELETE方法,在我的例子,我将使用POST方法简化. Angular和java通过RESTFUL服务(JAX-RS)进行通信,你无法在角度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); } }
Java人员服务
public class PersonService{ private final PersonRepository personRepository; @Autowired public PersonService(final PersonRepository personRepository) { this.personRepository= personRepository; } public List<Person> getPersons() { return personRepository.findAll();; } public HttpStatus deletePerson(final long id) { if (id > 0) { personRepository.delete(id); return HttpStatus.OK; } else { return HttpStatus.INTERNAL_SERVER_ERROR; } } }
Java Person Repository
public interface PersonRepository{ public void delete(int personId); public List<Person> findAll(); }
Angular app.js
(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 }) } }) })();
HTML
<html ng-app="personApp"> <body ng-controller=""personCtr> <input type="submit" ng-click="getPersons()"/> <input type="submit" ng-click="deletePerson(somePersonIdFromTableOrSomething)" </body> </html>