GVKun编程网logo

在Spring MVC 3.1中重定向后如何读取Flash属性?(springmvc重定向url)

16

以上就是给各位分享在SpringMVC3.1中重定向后如何读取Flash属性?,其中也会对springmvc重定向url进行解释,同时本文还将给你拓展asp.net-mvc–MVC在提交按钮单击后登录

以上就是给各位分享在Spring MVC 3.1中重定向后如何读取Flash属性?,其中也会对springmvc重定向url进行解释,同时本文还将给你拓展asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据、asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?、asp.net-mvc – 在ASP.NET MVC中重定向后发布、asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

在Spring MVC 3.1中重定向后如何读取Flash属性?(springmvc重定向url)

在Spring MVC 3.1中重定向后如何读取Flash属性?(springmvc重定向url)

我想知道如何在Spring MVC 3.1中重定向后读取flash属性。

我有以下代码:

@Controller@RequestMapping("/foo")public class FooController {  @RequestMapping(value = "/bar", method = RequestMethod.GET)  public ModelAndView handleGet(...) {    // I want to see my flash attributes here!  }  @RequestMapping(value = "/bar", method = RequestMethod.POST)  public ModelAndView handlePost(RedirectAttributes redirectAttrs) {    redirectAttrs.addFlashAttributes("some", "thing");    return new ModelAndView().setViewName("redirect:/foo/bar");  }}

我缺少什么?

答案1

小编典典

使用Model,它应该预先填充Flash属性:

@RequestMapping(value = "/bar", method = RequestMethod.GET)public ModelAndView handleGet(Model model) {  String some = (String) model.asMap().get("some");  // do the job}

或者,您也可以使用RequestContextUtils#getInputFlashMap

@RequestMapping(value = "/bar", method = RequestMethod.GET)public ModelAndView handleGet(HttpServletRequest request) {  Map<String, ?> inputFlashMap = RequestContextUtils.getInputFlashMap(request);  if (inputFlashMap != null) {    String some = (String) inputFlashMap.get("some");    // do the job  }}

PS你可以做回return new ModelAndView("redirect:/foo/bar");handlePost

编辑

JavaDoc说:

调用该方法时,RedirectAttributes模型为空,除非该方法返回重定向视图名称或RedirectView,否则永远不要使用它。

它没有提到ModelAndView,所以也许将handlePost更改为返回"redirect:/foo/bar"字符串或RedirectView

@RequestMapping(value = "/bar", method = RequestMethod.POST)public RedirectView handlePost(RedirectAttributes redirectAttrs) {  redirectAttrs.addFlashAttributes("some", "thing");  return new RedirectView("/foo/bar", true);}

RedirectAttributes在我的代码中使用RedirectViewmodel.asMap()方法,效果很好。

asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据

asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据

如何在用户单击提交之前,如何使用不需要用户登录的表单,并在此时提交表单(如果用户已登录),否则将重定向到登录页面.用户登录成功后,提交原始表单?原始表单具有< input type =“file”>元素也是,除非用户成功登录,否则不应上传文件.

解决方法

MVC处理这种情况.只需将“[Authorize]”属性仅放在具有[HttpPost]的表单后置操作上.在用户未登录时发布表单时,他将被重定向到帐户控制器登录操作(/ Account / Login)并将呈现登录视图;这是因为它在web.config中设置了.除此重定向外,还添加了查询字符串参数“ReturnUrl = / orginalform”.然后,MVC登录操作执行登录并再次将用户重定向到原始表单.

更新:如果您需要保留表单数据(这不经过测试,仅编译),下面应该包含自定义属性的代码,该属性将捕获表单数据

public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
       public override void OnAuthorization(
                            AuthorizationContext filterContext)
      {           
          if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
          {

              string loginUrl = "/Account/Login"; //Get this from web.config instead of hardcode
              if (filterContext.HttpContext.Request != null)
              {
                  loginUrl += "?ReturnUrl=" + filterContext.HttpContext
                                                           .Request
                                                           .Url
                                                           .AbsoluteUri;
                  foreach(var formData in filterContext.HttpContext.Request.Form)
                  {
                      loginUrl += "&"+formData.ToString();
                  }
              }              
              filterContext.Result = new RedirectResult( loginUrl );
          }
      }
    }

您可能需要对登录后期操作进行一些修改.返回表单获取操作也应该从uri字符串[FromUri]获取表单数据并再次呈现表单.

asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?

asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?

我正在使用RC,我已经通过NuGet查看了所有内容都是最新的.
在我的global.asax.cs中我得到了:
BundleTable.Bundles.AddDefaultFileExtensionReplacements();
BundleTable.Bundles.AddDefaultIgnorePatterns();
BundleTable.Bundles.AddDefaultFileOrderings();

Bundle scripts = new Bundle("~/Scripts");
scripts.IncludeDirectory("~/Scripts","*.js");
BundleTable.Bundles.Add(scripts);

Bundle css = new Bundle("~/Content/css");
css.IncludeDirectory("~/Content/css","*.css",false);
BundleTable.Bundles.Add(css);

我尝试了一些不同的配置而没有任何改进.

然后在我的布局中我得到了:

<link href="@BundleTable.Bundles.ResolveBundleUrl("~/Content/css")" rel="stylesheet" type="text/css" />
<script src="@BundleTable.Bundles.ResolveBundleUrl("~/Scripts")"> </script>

当页面加载它看起来很体面的网址时:

<link href="/Content/css?v=QAsFYXHCbnaU70oGVxpgi9py9iKQrT9C4BVNdHa7xoI1" rel="stylesheet" type="text/css" />

但该网址重定向到:

/Content/css/

返回404找不到错误…

有人有任何想法吗?

解决方法

决定是否处理请求的bundle模块逻辑不会接管对现有文件或目录的请求.这就是为什么捆绑请求与现有目录(或文件)位于同一虚拟路径时不起作用的原因.

asp.net-mvc – 在ASP.NET MVC中重定向后发布

asp.net-mvc – 在ASP.NET MVC中重定向后发布

我在ASP.NET MVC应用程序中使用 Redirect After Post模式.我有
以下场景:

>用户进入/ controller / index,要求他填写表格.
>表单值被POST到/ controller / calculate.
> Calculate操作根据输入执行计算,并实例化包含操作结果的复杂对象.此对象存储在TempData中,用户被重定向到/ controller / result.
> / controller / result从TempData检索结果并将其呈现给用户.

这种方法的问题在于,如果用户在查看/ controller / result中的结果时点击F5,则由于TempData已过期且结果对象不再可用,因此无法再呈现页面.

用户不希望出现这种行为.一种可能的解决方案是在POST之后重定向,而不是渲染结果视图.现在,如果用户点击F5,他会得到一个浏览器对话框,询问他是否要重新发布表单.这也是不希望的.

我想到的一个可能的解决方案是序列化结果对象并在重定向之前将其传递给URL,但AFAIK对GET请求的长度有一些限制,如果对象变得很大,我可能会遇到这种限制(特别是如果base64编码) ).

另一种可能性是使用Session对象而不是TempData来持久保存结果.但在实施此解决方案之前,我想知道是否有更好的方法.

更新:

进一步研究这个问题我发现如果我将结果对象重新放在/ data / result动作中的TempData中,它实际上是有效的:

public ActionResult Result()
{
    var result = TempData["result"];
    TempData["result"] = result;
    return View(result);
}

但这感觉很脏.这种方法是否会产生任何副作用(例如切换到进程外会话提供程序,因为目前我使用的是InProc)?

解决方法

使用一些唯一键将其存储在会话中,并将密钥作为URL的一部分传递.然后,只要会话处于活动状态,他们就可以使用后退/前进按钮来查看其内容,并且仍然可以正确响应URL.或者,您可以使用ASP缓存,但我通常会为用户共享的对象保留该缓存.当然,如果您使用计算参数作为键,并在缓存中找到结果,则可以简单地重复使用它.

asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)

asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)

我从部分视图发布一个表单,该表单通过 Html.RenderAction呈现,我希望在表单发布之后重定向到请求来自的相同路由.

public ActionResult Index()
{
    return PartialView();
}

[HttpPost]
public ActionResult Index(FormModel input)
{
     ...
     return //Redirect to the same route
}

谁知道怎么做?

解决方法

您可以从Request对象中检索UrlReferrer:

return Redirect(HttpContext.Request.UrlReferrer.OriginalString);

我们今天的关于在Spring MVC 3.1中重定向后如何读取Flash属性?springmvc重定向url的分享已经告一段落,感谢您的关注,如果您想了解更多关于asp.net-mvc – MVC在提交按钮单击后登录重定向后从表单发布数据、asp.net-mvc – 为什么在我的ASP MVC4应用程序中重定向资源捆绑?、asp.net-mvc – 在ASP.NET MVC中重定向后发布、asp.net-mvc – 如何在asp.net mvc中重定向到相同的路由(来自请求的地方)的相关信息,请在本站查询。

本文标签: