GVKun编程网logo

是否可以跨多个控制器访问带有Spring MVC注释的会话变量?(一个controller调用多个service)

5

最近很多小伙伴都在问是否可以跨多个控制器访问带有SpringMVC注释的会话变量?和一个controller调用多个service这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展A

最近很多小伙伴都在问是否可以跨多个控制器访问带有Spring MVC注释的会话变量?一个controller调用多个service这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展ASP.NET MVC 中的会话变量、asp.net-mvc – MVC 4:多个控制器动作参数、asp.net-mvc – 单个控制器的MVC多个视图、asp.net-mvc – 启用/禁用每个控制器/操作方法的会话状态等相关知识,下面开始了哦!

本文目录一览:

是否可以跨多个控制器访问带有Spring MVC注释的会话变量?(一个controller调用多个service)

是否可以跨多个控制器访问带有Spring MVC注释的会话变量?(一个controller调用多个service)

我有一个运行Spring 3.0并使用Spring-MVC的Web应用程序。我有几个这样设置的控制器:

@Controller@RequestMapping("/admin")@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"})public class AdminController {...}@Controller@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"})public class PublicController {....}

我可以使用以下方法将带注释的变量添加到ModelMap中:

map.addAttribute("user", "Bob");

可以很好地将变量保留在当前控制器中;我可以通过该控制器中任何其他方法从modelMap访问var。但是,当用户点击另一个控制器中的页面时,即使@SessionAttributes中列出了相同的变量,第二个控制器中也无法使用该变量。

是否可以使用注释跨多个控制器访问这些注释变量?

答案1

小编典典

不,这是不可能的-在我看来,SessionAttributes的名称很错误。

如果要在不同的控制器之间共享这些属性,则可以使用以下命令将它们显式放入会话中:

session.setAttribute()

ASP.NET MVC 中的会话变量

ASP.NET MVC 中的会话变量

我正在编写一个 Web
应用程序,它允许用户浏览到网站中的多个网页,发出某些请求。用户输入的所有信息都将存储在我创建的对象中。问题是我需要从网站的任何部分访问这个对象,我真的不知道实现这一点的最佳方法。我知道一种解决方案是使用会话变量,但我不知道如何在
asp .net MVC 中使用它们。我将在哪里声明一个会话变量?还有其他方法吗?

asp.net-mvc – MVC 4:多个控制器动作参数

asp.net-mvc – MVC 4:多个控制器动作参数

而不仅仅是{controller} / {action} / {id},可以有多个参数
{controller} / {action} / {id} / {other id}?

我是MVC的新手(来自普通网页).如果不可能,MVC是否提供了一个帮助方法,如网页中可用的UrlData?

解决方法

您只需要在global.asax中映射新路由,如下所示:

routes.MapRoute(
    "NewRoute",// Route name
    "{controller}/{action}/{id}/{another_id}",// URL with parameters
    new { controller = "Home",action = "Index",id = UrlParameter.Optional,another_id = UrlParameter.Optional } // Parameter defaults
);

然后在控制器的操作中,您可以选择如下参数:

public ActionResult MyAction(string id,string another_id)
{
    // ...
}

asp.net-mvc – 单个控制器的MVC多个视图

asp.net-mvc – 单个控制器的MVC多个视图

在MVC中是否可以使用单个控制器“ListController”执行以下操作来处理以下页面…

www.example.com/List/Cars/ForSale/{id} optional

www.example.com/List/Cars/ForRent/{id} optional

www.example.com/List/Search/

www.example.com/List/Boats/ForSale/{id} optional

www.example.com/List/Boats/ForRent/{id} optional

www.example.com/List/Boats/Search/

如果没有,除了将CarsController和BoatsController分开之外,还有什么方法可以绕过它吗?他们将使用相同的逻辑,只是希望URL不同.

解决方法

你绝对可以做到这一点.使用路由很简单.您可以将不同的URL路由到控制器中的不同操作.

以下是定义上述网址的示例:

routes.MapRoute("CarSale"
    "/List/Cars/ForSale/{id}",new { controller = "list",action = "carsale",id =  UrlParameter.Optional } );

routes.MapRoute("ListSearch"
    "/List/search",action = "search"} );


routes.MapRoute("BoatSale"
    "/List/Boats/ForSale/{id}",action = "boatsale",id =  UrlParameter.Optional } );

然后在您的控制器中,您将拥有每个的操作方法:

public ListController 
{
    // ... other stuff 

    public ActionResult CarSale(int? id)
    {
      // do stuff

      return View("CarView");
    }

    public ActionResult BoatSale(int? id)
    {
      // do stuff

      return View("BoatView");
    }

        // ... other stuff 
}

asp.net-mvc – 启用/禁用每个控制器/操作方法的会话状态

asp.net-mvc – 启用/禁用每个控制器/操作方法的会话状态

我们正在构建一个ASP.NET MVC应用程序,该应用程序将部署在硬件负载平衡器之后,其中除了其他内容之外还支持缓存。

我们的建议是手动定义哪些URL模式应由负载均衡器缓存。对于我们来说这将是一个相当简单的过程,因为我们的“目录”页面是相对静态的,然后是“订购”页面。

必须避免在缓存页面上使用会话状态,因为整个响应由负载平衡器缓存 – 这包括发送的任何Cookie。

理想情况下,会有一个可以应用于控制器或动作方法的属性,允许选择性地使用会话状态,但似乎不是一个。我意识到这样一种方法会导致丢失的会话,如果使用离开“会话区” – 没关系。

除了重新实现整个ASP.NET MVC HTTP控制器…任何建议?

提前致谢。

解决方法

这是包含在MVC 2期货。有关更多信息,请参阅 http://blogs.msdn.com/rickandy/archive/2009/12/17/session-less-mvc-controller.aspx。

今天关于是否可以跨多个控制器访问带有Spring MVC注释的会话变量?一个controller调用多个service的分享就到这里,希望大家有所收获,若想了解更多关于ASP.NET MVC 中的会话变量、asp.net-mvc – MVC 4:多个控制器动作参数、asp.net-mvc – 单个控制器的MVC多个视图、asp.net-mvc – 启用/禁用每个控制器/操作方法的会话状态等相关知识,可以在本站进行查询。

本文标签: