我试图在我的Spring MVC应用程序中实现RESTful URL.一切都很好,除了处理表格提交.我需要将其重定向回原始表单或"成功"页面.
@Controller
@RequestMapping("/form")
public class MyController {
@RequestMapping(method = RequestMethod.GET)
public String setupForm() {
// do my stuff
return "myform";
}
@RequestMapping(method = RequestMethod.POST)
public String processForm(ModelMap model) {
// process form data
model.addAttribute("notification", "Successfully did it!");
return "redirect:/form";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,正如我在Spring文档中读到的那样,如果重定向任何参数都会被放入url中.这对我不起作用.围绕这个最优雅的方式是什么?
我正在进行一些单元测试,并使用Moq模拟一些属性.
现在,这是一个Controller测试(ASP.NET MVC 3).我的控制器派生自一个名为AbstractController的抽象控制器.
该控制器依赖于Http Context(为了做主题,基于HTTP HOST头的特定于域的逻辑等).
这是通过名为WebSiteSettings的属性完成的:
public abstract class AbstractController : Controller
{
public WebSiteSettings WebSiteSettings { get; private set; }
// other code
}
Run Code Online (Sandbox Code Playgroud)
注意私人集 - ctor设置它.所以,我把它改成使用了一个界面,这就是我所嘲笑的:
public IWebSiteSettings WebSiteSettings { get; private set; }
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个"FakeWebSiteSettings",它嘲笑Http Context以便它读取HTTP头.
问题是,当我运行测试时,我得到一个NotSupportedException:
非虚拟(在VB中可覆盖)成员的设置无效:x => x.WebSiteSettings
这是相关的模拟代码:
var mockWebSiteSettings = new Mock<FakeWebSiteSettings>();
var mockController = new Mock<MyController>(SomeRepository);
mockController.Setup(x => x.WebSiteSettings).Returns(mockWebSiteSettings.Object);
_controller = mockController.Object;
var httpContextBase = MvcMockHelpers.FakeHttpContext();
httpContextBase.Setup(x => …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AngularJS创建我的第一个应用程序.但是,如果我需要为我的特定情况使用指令,我有点困惑.
我有一个简单的Map页面,我需要显示所选区域的lat/lon值.目前我根本没有使用指令.我在控制器中执行所有操作并使用partials来显示结果.我不打算在任何其他地方重复使用我的地图视图.这就是为什么我觉得我不需要指令.
另一方面,我在某处读到,每当你试图操纵控制器中的DOM时(我正在使用google maps API),你应该将该部分移动到指令中.
这是我的简单控制器:
function MapViewController($scope) {
$scope.zoom = 6;
$scope.lat = 37;
$scope.lon = -122;
var mapOptions = {
center: new google.maps.LatLng($scope.lat, $scope.lon),
zoom: $scope.zoom,
mapTypeId: google.maps.MapTypeId.HYBRID
};
$scope.map = new google.maps.Map(
document.getElementById('map-canvas'), mapOptions);
/*
* Update zoom and other map attributes.
*/
google.maps.event.addListener($scope.map, 'center_changed', function() {
$scope.$apply(function () {
$scope.zoom = $scope.map.getZoom();
var center = $scope.map.getCenter();
$scope.lat = center.lat();
$scope.lon = center.lng();
var bounds = $scope.map.getBounds();
var northEast = bounds.getNorthEast();
$scope.northEastLat = northEast.lat();
$scope.northEastLon = northEast.lng(); …Run Code Online (Sandbox Code Playgroud) 我试图将2个提交按钮发布到表单,每个按钮操作映射到不同的控制器.这是我的映射
@RequestMapping(value="/save", method=RequestMethod.POST, params="save")
@RequestMapping(value="/save", method=RequestMethod.POST, params="renew")
Run Code Online (Sandbox Code Playgroud)
我的提交按钮看起来像这些 -
<input type="submit" name="save" class="button" value="Save" />
<input type="submit" name="renew" class="button" value="Renew" />
Run Code Online (Sandbox Code Playgroud)
从我的映射中可以看出,我依靠使用params来区分点击的按钮.问题是它有90%的时间有效,但有时我会得到以下例外 -
java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8090/myapp/save': {public java.lang.String com.myapp.SaveController.save(MyEntity,javax.servlet.http.HttpSession), public java.lang.String com.myapp.SaveController.saveAndRenew(MyEntity,javax.servlet.http.HttpSession)}
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:248)
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:194)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当这种情况发生并重新提交页面时,一切都运行良好.有没有更好的方法来实现我想要做的事情?
谢谢!
在我使用的控制器代码中:Request.Url.<Something>.ReSharper建议Request.Url可以为null.
那么,什么时候可以Request.Url为null?我不是在谈论测试,我只对一个已经部署的应用程序感兴趣.
请注意,到目前为止,我还没有收到任何NullReferenceException使用的信息Request.Url.
我有QuestionController我现在有了AnotherQuestionController,其中的动作应该使用app/views/question /中的模板和部分渲染吗?这可能吗?看起来应该是这样.
我试过了
render :template => "question/answer"
Run Code Online (Sandbox Code Playgroud)
但answer.html.erb包含部分内容,我得到的错误就像
"在视图路径中缺少模板another_question/_my_partial.erb"
那么有没有办法告诉Rails"将AnotherQuestionController视为其QuestionController,并在app/views/question中查找视图和部分"?或者我是否必须创建app/views/another_question - 这将导致重复(这不能是Rails方式).
谢谢
我知道这可能是一个非常简单的概念.我正在尝试创建一个控制器和操作的链接.例如,我的布局文件中有一个链接,用于在单击链接时更新记录,因此我需要能够链接到控制器和操作.我怎么做到这一点?
我在这里有一定的困难,我无法成功地调用它属于一种方法ProjectPage 模型的ProjectPage 控制器.
我在我的ProjectPage控制器中:
def index
@searches = Project.published.financed
@project_pages = form_search(params)
end
Run Code Online (Sandbox Code Playgroud)
在我的ProjectPage 模型中:
def form_search(searches)
searches = searches.where('amount > ?', params[:price_min]) if check_params(params[:price_min])
@project_pages = ProjectPage.where(:project_id => searches.pluck(:'projects.id'))
end
Run Code Online (Sandbox Code Playgroud)
但是,我无法成功调用该form_search 方法.
我试图在控制器函数中访问指令的属性.但是,当我访问它时,它是未定义的.我注意到如果我做一个简单的计时器就行了.有没有办法只在指令执行后才能执行代码,并且它的范围已准备好并设置为使用?
我弄了一个小提琴.确保您的控制台已打开.http://jsfiddle.net/paulocoelho/uKA2L/1/
这是我在小提琴中使用的代码:
<div ng-app="testApp" >
<testcomponent text="hello!"></testcomponent>
</div>
Run Code Online (Sandbox Code Playgroud)
var module = angular.module('testApp', [])
.directive('testcomponent', function () {
return {
restrict: 'E',
template: '<div><p>{{text}} This will run fine! </p></div>',
scope: {
text: '@text'
},
controller: function ($scope, $element) {
console.log($scope.text); // this will return undefined
setTimeout(function () {
console.log($scope.text); // this will return the actual value...
}, 1000);
},
link: function ($scope, $element, $attrs) {
console.log($scope.text);
setTimeout(function () {
console.log($scope.text);
}, 1000);
}
};
});
Run Code Online (Sandbox Code Playgroud) 我的PHP系统中存在常见的MVC情况:Controller从View包含$_POST数据接收请求.现在我有三种方法来处理数据:
a)Controller唯一调用Model和Model处理$_POST数据.
b)在Controller所述转换$_POST数据成变量,并将它们传递到Model.
c)Controller将$_POST数据转换为Model域对象并仅将对象传递给Model.
目前,我正在关注选项A,但我认为这是错误的,所以我在考虑使用选项C.
那么,根据MVC,处理$_POST数据的正确方法是什么?
编辑目前,我没有使用任何MVC框架.
编辑2通常,同样Controller处理来自浏览器,Web服务,离线应用程序等的请求,或者每个人都有自己的请求Controller?
controller ×10
java ×2
action ×1
angularjs ×1
asp.net-mvc ×1
c# ×1
events ×1
javascript ×1
link-to ×1
methods ×1
model ×1
moq ×1
php ×1
post ×1
redirect ×1
render ×1
resharper ×1
spring ×1
spring-mvc ×1
unit-testing ×1
view ×1