2

Springモバイルのドキュメントは、以下のような別のモバイル ビュー レイヤーを実装する方法を示しています。

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

コントローラーはどちらのビューリゾルバーを使用するかを決定できず、どのビューのみを使用するかを決定できないため、2 つの別個のリゾルバーを使用することはできません。

リゾルバーの選択に関しては、このユースケースの範囲外である「順序」プロパティを介してのみ制御できます。


編集:すべてのコントローラーメソッドで同じロジックが複製されているコードの匂いを感じました。

したがって、そのロジックを 1 か所に保持するために、メソッドHandlerInterceptorのビュー名にプレフィックスを追加するカスタムを使用してみてください。postHandlerequest に基づいて、現在の SitePreference インスタンスを自分で取得するだけで十分です。これは完全に可能です。

于 2011-12-09T15:11:46.373 に答える