spring -移动站点首选项在视图解析器中,而不是在每个控制器中



spring mobile文档展示了如何实现一个独立的移动视图层,如下所示:

@Controller
public class HomeController {
    @RequestMapping("/")
    public String home(SitePreference sitePreference, Model model) {
        if (sitePreference == SitePreference.MOBILE) {
            // prepare mobile view for rendering
            return "home-mobile";
        } else {
            // prepare normal view for rendering
            return "home";
        }
    }
}

然而,我更喜欢在视图解析器中应用不同的视图名称(以文件夹为前缀)。我该怎么做呢?

(编辑:没有答案,通常春季配置问题有几个响应…我问了一个特别愚蠢的问题吗?)

我觉得你的问题似乎有道理。我能想到的最直接的答案是将视图分开,并利用文件夹名称中的站点偏好值:

/views/normal/home.jsp
/views/mobile/home.jsp

(当然,视图解析器的前缀应该是"/views/")。

现在在控制器中你可以输入:

return sitePreference.name().toLowerCase() + "/home";

你不能使用两个单独的解析器,因为控制器不能决定使用哪个视图解析器,只能决定使用哪个视图。

至于解析器的选择,那只能通过"order"属性来控制,而这个属性完全超出了这个用例的范围。


编辑:在所有控制器方法中复制相同的逻辑时,我感觉到代码的味道。

因此,为了将逻辑保持在一个地方,尝试使用自定义HandlerInterceptor,它将在postHandle方法中为视图名称添加前缀。您只需要根据请求自己抓取当前SitePreference实例,这应该是完全可能的。

相关内容

最新更新