वहाँ एक अन्य विकल्प का सुझाव दिया here
हालांकि मैं विस्तार संकल्प लिया है ContentNegotiatingViewResolver और संकल्प ViewName विधि को ओवरराइड करना, मैंने अपना व्यू रीसोलवर एचटीपीएचडर पैराम व्यूसेवर कहा। विस्तारित विधि इस तरह दिखता है:
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
//Get the HTTP Header param "User-Agent"
String headerParamValue = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getHeader(headerParam);
viewName = setViewName(viewName, headerParamValue);
return super.resolveViewName(viewName, locale);
}
कहाँ headerParam = "उपयोगकर्ता-एजेंट" (या किसी अन्य HTTP शीर्ष लेख पैरामीटर आप चाहें, तो इस सेम एक्सएमएल में परिभाषित किया गया है), उसके बाद आप इसे का मूल्यांकन करें और viewName निर्धारित करें। मेरे मामले में HttpHeaderParamViewResolver को मानचित्र के साथ कॉन्फ़िगर किया जा सकता है जहां कुंजी वास्तविक दृश्य नाम में एक उपसर्ग है और मान एक RegExp है जिसका उपयोग हेडर पैरा के मान का मूल्यांकन करने के लिए किया जाएगा।यह ऐप प्रसंग एक्सएमएल में इस तरह दिखता है:
<bean id="HttpHeaderViewResolver" class="com.application.viewresolver.HttpHeaderParamViewResolver">
<property name="viewResolvers">
<list>
<ref bean="tilesViewResolver"/>
</list>
</property>
<property name="headerParam" value="User-Agent"/>
<property name="viewPrefixPattern">
<map>
<entry>
<key>
<value>mobile-webkit</value>
</key>
<value>iPhone.*Apple.*Mobile.*Safari</value>
</entry>
<entry>
<key>
<value>mobile-bb</value>
</key>
<value>BlackBerry([0-9]{0,4})([a-zA-Z])?</value>
</entry>
</map>
</property>
</bean>
इस तरह मेरी नियंत्रक एक दृश्य userDetails कहा जाता है और एक IPhone पहले पैटर्न यह catchs साथ आवेदन तक पहुँच रहा है कॉल और मोबाइल के संलग्न कर देता है, तो webkit प्रत्यय इसलिए दृश्य अब मोबाइल-वेबकिट-उपयोगकर्ता विवरण और उसके बाद टाइल्स व्यू रीसोलवर पर भेजा गया जो वास्तविक दृश्य उत्पन्न करता है।
मैंने कई संभावनाओं की खोज की और मुझे लगता है कि यह सबसे आसान और सबसे लचीला है जिसके साथ मैं आने में सक्षम था। इस मामले में एक संपूर्ण अलग-अलग दृश्य चुनने की क्षमता महत्वपूर्ण थी क्योंकि हम डब्ल्यूएपी से आईफोन 4 और वेबकिट सक्षम मोबाइल से विभिन्न प्रकार के उपयोगकर्ता एजेंटों का समर्थन करते हैं, इसलिए विचार उपयोगकर्ता एजेंट से उपयोगकर्ता एजेंट में नाटकीय रूप से बदलते हैं। अन्य लाभ यह है कि अब आपको इस मुद्दे को इस दृश्य को संभालने की आवश्यकता नहीं है क्योंकि आप जितनी चाहें उतनी विशेषताओं को देख सकते हैं। अन्य उज्ज्वल पक्ष यह है कि आप सामग्री दृश्यगोष ViewResolver के बाद दृश्य दृश्यों को हटाने या बदलने के बिना इसे आसानी से कार्यान्वित कर सकते हैं, जो आपके द्वारा परिभाषित विशिष्ट अनुक्रम में अन्य दृश्य रिज़ॉल्यूवर को दृश्य कॉल को प्रतिनिधि करने की क्षमता है।
नीचे की ओर यह है कि आप विचारों को विशेषज्ञ बनाने के लिए लुभाने और ऐप को एक सतत दुःस्वप्न प्रदान करने वाली एक टन दृश्य फ़ाइलों के साथ समाप्त हो सकते हैं।
आशा है कि यह सहायक होगा।
एक कस्टम व्यू रिज़ॉल्यूशन बहुत आसान होगा, मुझे नहीं लगता कि आपको उससे कहीं अधिक सरल मिलेगा। – skaffman
हाँ, बस यह सुनिश्चित कर लें कि मैं कुछ स्पष्ट नहीं दिख रहा था। –