2011-12-08 5 views
2

spring mobile documentationは、以下のような別のモバイルビュー層を実装する方法を示しています。viewresolverにおける春モバイルサイトの嗜好にない

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

しかし、私はそれをプレフィックス(異なるビュー名を適用することを好みますフォルダ)を表示します。どうすればいい?

(編集:いいえ答え、通常は春の設定の問題は、いくつかの回答を持っている...私は特に愚かな質問をしている?)

答えて

1

をあなたの質問は、私には有効なようです。私は考えることができる最もストレートフォワード答えは、ビューが分割さたフォルダ名でサイトの優先値を使用することがされています

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

(ビューリゾルバの接頭辞が「/ビュー/」、である必要がありますコース)。あなたが持つことができるコントローラで今

:コントローラが使用するviewresolverかを決めるが、唯一のどのビューができないよう

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

あなたは、二つの別々のリゾルバを使用することはできません。

リゾルバの選択は、このユースケースの対象外である「注文」プロパティでのみ制御できます。


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

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

+0

ありがとうございます。はい、それは良い提案です。しかし、これを行う方法は、ビューリゾルバ自体にしかありませんか?コントローラーのサイトの設定を確認しないでください。私は最新バージョンを使用しており、可能な限り注釈を付けることを試みています。 – NimChimpsky

+0

私の更新を見てください。私の提案は、インターセプタを使用することです。 –

+0

もちろん、ビューリゾルバをサブクラス化してこの機能を追加することもできます.Pluggableストラテジで、SitePreferenceに密接に結合されていない可能性があります。 –

関連する問題