我想根据用户代理对我的观点做出某些决定,但我不想用JavaScript来做。
所以我决定在服务器端通过读取我的控制器方法中的HttpServletRequest
然后将用户代理注入模型,并使用JSTL相应地显示jsp来检查注入的变量。
问题是,我想为我的所有视图执行此操作(某些决策可能在所有页面的基本布局中),但我不想通过所有控制器方法并放置{每个人都有{1}}个。有什么方法可以让这个变量适用于所有视图吗?
我虽然使用model.addAttrbiute()
,但我无法访问请求信息(或我)?
答案 0 :(得分:2)
你试过吗?据我所知,可以在请求映射方法上使用的“所有”可能参数也可以用于modelattribute方法。你甚至可以链接这些方法。我自己还没有使用过httprequest。试一试。
将它与类@ControllerAdvice结合使用,您将在所有模型中使用它。
答案 1 :(得分:1)
您可以在类级别使用@ControllerAdvice
注释,这将影响所有控制器。
在方法级别将其与@ModelAttribute
结合使用,您将获得预期的结果。
访问请求信息时:
一种方法是在会话中保存User-Agent
值(在发出第一个请求时),然后在使用@ModelAttribute
注释的方法中从会话中获取它:
这样,您可以在从任何控制器返回的每个视图中获得User-Agent
值。