根据请求参数渲染不同的图块(Springframework 和图块)

发布于 2024-08-27 21:48:29 字数 638 浏览 5 评论 0原文

我需要更改一些现有的应用程序以根据某些请求参数呈现不同的视图。该应用程序使用图块。我以前从未使用过瓷砖,需要一些提示如何去做。

Tiles 定义如下:

<bean id="viewResolver"class="org.springframework.web.servlet.view.UrlBasedViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /></bean>

假设我有 welcome.tile,如果请求中有一些参数,例如。 id=xyz 和图块 xyz.welcome.tile 存在我想渲染这个,如果它不存在,我想渲染默认值。我的控制器返回 welcome.tile 作为视图,但我不想向控制器添加代码,我想尽可能简单地执行此操作。

我的想法是以某种方式拦截视图分辨率,以便它将根据请求检查参数,然后验证带有参数前缀的给定图块是否存在,如果存在,则将使用它。但我不知道从哪里开始。

这是一些旧代码,因此不幸的是我无法承受太多更改。

提前致谢 康拉德

I need to change some existing application to render different view depending on some request parameter. This application is using tiles. I never used tiles before, and need a bit of hint how to go about doing this.

Tiles are defined as follows:

<bean id="viewResolver"class="org.springframework.web.servlet.view.UrlBasedViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /></bean>

Let's say I have welcome.tile, if there is some parameter in request eg. id=xyz and tile xyz.welcome.tile exists I would like to render this one, if it does not exist, I would like to render default. My controller returns welcome.tile as view, but I do not want to add code to controllers, I would like to do this as simply as possible.

My thought was to somehow intercept view resolution so it will check parameter on request and then verify if given tile with prefix from parameter exists, if it exists it would be used. But I am not sure where to start.

This is some old code, so unfortunately I cannot afford for to much changes.

Thanks in advance
Konrad

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月竹挽风 2024-09-03 21:48:29

我认为您可以使用读取您希望的请求参数并使用此信息构建视图名称的版本来扩展 UrlBasedViewResolver 。知道 ViewResolver 接口不提供 HttpRequest 的实例,您可以使用 org.springframework.web.util.RequestHolder.currentRequest() 静态方法获取它。

这样如果你请求的是(例如)/mvc/dailyReport/riticStuff
viewName 可以是 dailyReport.riticStuff

,如果您请求的是 /mvc/dailyReport/riticStuff?printable
viewName 可以解析为 dailyReport.riticStuff.printable,其中这是 dailyReport.riticStuff 视图的可打印版本。

希望有帮助

I think you can achieve that extending UrlBasedViewResolver with a version that reads the request parameter of your wish and build the view name with this information. Knowing that ViewResolver interface doesn't provide an instance of HttpRequest, you can get it using the org.springframework.web.util.RequestHolder.currentRequest() static method.

This way if you request is (for example) /mvc/dailyReport/criticalStuff,
the viewName can be dailyReport.criticalStuff

and if you request is /mvc/dailyReport/criticalStuff?printable,
the viewName can be resolved as dailyReport.criticalStuff.printable where this is a printable version of the dailyReport.criticalStuff view.

Hope it helps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文