java—如何在mvc应用程序的多个视图中显示公共信息?

wydwbb8l  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(312)

在mvc应用程序中,在多个视图之间共享公共对象的最佳方式是什么?假设我有一个logincontroller,它接受用户名和密码,对用户进行身份验证并加载他们的数据(帐户信息、全名等)。我想在每一页上都显示这个-类似于带有“欢迎”的标题 <user name >,你有 <account value >我不认为我应该把用户对象存储在会话中。我必须把它和每个控制器一起退回吗?
我在这个应用程序中使用spring框架,但我认为这并不重要。必须有一些通用的方法来处理这个常见的用例。
更新
不确定这是否重要,但我还需要userid(登录时返回的主键)作为其他控制器的参数。因为这只是返回的用户对象上的另一个值,但没有显示,所以我认为答案与显示的数据相同。

mftmpeh8

mftmpeh81#

我以前在springmvc应用程序中通过使用 HandlerInterceptor (javadoc链接)将这些细节添加到modelandview中我需要它的所有页面。
因为 HandlerInterceptor 就是能够通过一段代码将公共功能应用于许多请求和/或响应,这是一种自然的适合。拦截器允许您钩住控制器的前处理或后处理步骤;您可以配置 UrlHandlerMapping 如果愿意,只将拦截器应用于某些url(或url的模式)。

lnvxswe2

lnvxswe22#

您并没有真正共享公共对象—这是公共数据(是的,由对象 Package )。假设您有一个最小的userinfo类和一个相应的模板片段来显示它。该片段将包含在您的视图中。
但是不管框架是什么(以及如何将这个公共片段添加到视图中),框架/模板引擎都需要找到一个“userinfo”绑定并获取所需的字段。
除非您计划在每个页面请求上点击(db)后端以获取该信息,否则您将需要缓存它。通常这将在会话中进行。

ar5n3qh5

ar5n3qh53#

如果有相当多的逻辑与公共元素相关联,那么使用 ServletRequest.getRequestDispatcher() 又称作 <jsp:include /> ,然后您可以使用“子控制器”和“子视图”再次完成整个请求处理周期。
编辑:看SpringMVC HandlerInterceptor s

相关问题