Ben genişletme giderilmiş Ancak bir diğer seçenek
here önerdi yoktur ContentNegotiatingViewResolver ve çözümViewName yöntemini geçersiz kılar, ViewResolver HttpHeaderParamViewResolver'u aradım. genişletilmiş yöntem şöyle görünür:
@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);
}
Nerede headerParam = "User-Agent" (veya benzeri başka herhangi bir HTTP başlık parametresi, bu fasulye xml tanımlanır), bundan sonra bunu değerlendirip viewName değerini belirleyin. Benim durumda HttpHeaderParamViewResolver anahtar bir önek gerçek VIEWNAME eklenecek ve değer başlık param değerini değerlendirmek için kullanılacak bir RegExp olduğu bir harita ile yapılandırılabilir.Bu Uygulama Bağlam XML şöyle görünür:
<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>
O yol benim denetleyicisi bir görünüm userDetails denilen ve ilk desen onu fiksatörleri bir IPhone ile uygulamayı erişen çağırır ve Mobil platforma ekler eğer webkit, şimdi görünüm mobile-webkit-userDetails ve daha sonra gerçek görünümü oluşturan fayansViewResolver geçirilir.
Çok fazla olasılık keşfettim ve bunun en kolay ve en esnek olduğunu düşündüm. Bu durumda farklı bir görünümü seçebilme kabiliyeti kritikti çünkü WAP'tan IPhone 4'e ve WebKit özellikli mobil cihazlara kadar çok çeşitli kullanıcı aracılarını destekliyoruz, böylece kullanıcılar kullanıcı aracısından kullanıcı temsilcisine önemli ölçüde değişiyor. Diğer avantajı ise, görüntülemeyi istediğiniz gibi uzmanlaştığınız için artık bu konuyla ilgilenmeniz gerekmemektedir. Diğer parlak tarafı ise, ContentNegotiatingViewResolver görüntülemesini, tanımladığınız belirli dizideki diğer görüntü çözümleyicilerine devretme yeteneğine sahip olduğundan, halihazırda sahip olduğunuz görüntü çözümleyicilerini kaldırmanıza veya değiştirmenize gerek kalmadan bunu kolayca gerçekleştirebilirsiniz.
Aşağı tarafı, görünümleri uzmanlaştırmak ve uygulamaya bir korunabilir kabus oluşturan bir ton görüntü dosyaları ile sonuçlandırmak isteyebilirsiniz.
Yardım etmekte fayda var.
Özel bir görünüm çözümleyici oldukça kolay olurdu, bundan daha basit bir şekilde elde edeceğinizi sanmıyorum. – skaffman
Evet, sadece belli bir şeyle ilgilenmediğime emin oldum. –