【发布时间】:2015-05-26 11:49:29
【问题描述】:
我必须将 id 发送到 spring 控制器,但我得到 404。我正在使用 angularjs、spring 和 mongodb。我正在完美地获取数据。 Onclick 的批准/拒绝按钮 ID 被传递给 controller.js 但之后我得到 404。
我还必须将行索引传递给控制器,以便在数据库中更新数据后删除行。这该怎么做?请提供一些逻辑。
HTML
<tbody>
<tr ng-repeat="task in taskDetails">
<td style="text-align: center;">{{task.name}}</td>
<!-- <td style="text-align: center;">{{task.owners}}</td> -->
<td style="text-align: center;">
<span ng-repeat="owner in task.owners">{{owner.ownerName.name}}{{$last ? '' : ', '}}</span>
</td>
<td style="text-align:center;">
<button class="btn btn-mini btn-primary" ng-click="approveTask(task)" value="approveTask">Approve</button>
<button class="btn btn-mini btn-danger" ng-click="rejectTask(task)" value="rejectTask">Reject</button>
</td>
</tr>
</tbody>
控制器
//controller.js
$scope.approveTask = function(task) {
alert(task);
var dataObj = {
id : task.id
};
$http.post('/userNotification/task/approve', dataObj).success(function (data) {
alert("Approved! "+ data);
});
}
$scope.rejectTask = function(task) {
alert(task);
var dataObj = {
id : task.id
};
$http.post('/userNotification/task/reject'+ dataObj).success(function(data) {
alert("Rejected! "+ data);
});
}
弹簧控制器
//spring controller
package com.rmtool.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.rmtool.mongo.dao.TaskDAO;
import com.rmtool.service.MongoService;
@Controller
@RequestMapping("/userNotification")
public class UserNotificationController {
@Autowired
MongoService mongoService;
@RequestMapping(value = "/fetchTaskForApproval",
method = RequestMethod.GET)
public @ResponseBody List<TaskDAO> notification(){
System.out.println("entering notification");
List<TaskDAO> taskDAOLists=new ArrayList<TaskDAO>();
taskDAOLists = mongoService.fetchPendingTask("Pending Approval");
System.out.println("exiting notification");
System.out.println(taskDAOLists);
return taskDAOLists;
}
@RequestMapping(value = "/task/approve", method = RequestMethod.POST)
public @ResponseBody void approveTask(@RequestBody TaskDAO task){
System.out.println("task Id :"+task.getId());
mongoService.approvePendingTask(task.getId());
}
@RequestMapping(value = "/task/reject/{id}", method = RequestMethod.POST)
public @ResponseBody void rejectTask(@PathVariable("id") String id){
mongoService.rejectPendingTask(id);
}
}
【问题讨论】:
-
当您检查浏览器的控件时,在“网络”选项卡上,您的服务器的 URL 是否正常?您的 POST 是否真的试图到达
.../task/reject/{id}? -
是的..它是正确的。请检查批准。我需要为拒绝做一些代码。
-
你需要写
$http.post('/userNotification/task/reject/'+ dataObj)而不是$http.post('/userNotification/task/reject'+ dataObj),否则他会在reject之后输入你的id。 -
这是我写的:$scope.approveTask = function(task) { alert(task); var dataObj = { id : task.id }; $http.post('/userNotification/task/accept/',dataObj.id).success(function (data) { alert("Approved!"+ data); }); }
-
@RequestMapping(value = "/task/approve", method = RequestMethod.POST) public @ResponseBody void approveTask(@RequestBody TaskDAO task){ System.out.println("task Id :"+任务.getId()); mongoService.approvePendingTask(task.getId()); }