2

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";
        }
    }
}

但是,我更愿意在视图解析器中应用不同的视图名称(以文件夹为前缀)。我该怎么做?

(编辑:没有答案,通常弹簧配置问题有一些回应......我问过一个特别愚蠢的问题吗?)

4

1 回答 1

1

你的问题对我来说似乎有效。我能想到的最直接的答案是拆分视图并使用文件夹名称中的站点首选项值:

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

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

现在在控制器中你可以拥有:

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

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

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


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

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

于 2011-12-09T15:11:46.373 回答