I'm not sure I understand what you'd like to see--you said "I want the mobile version [to have] access to the full (normal?) version. Unfortunately, the value of SitePreference is always normal unless set to mobile. "
I don't quite understand, as a mobile user can get access to the full (normal) version by indicating a NORMAL site_preference. A SitePreference.NORMAL value should result in the full (normal) version being served to the user, which seems to be what you want.
When you say "Therefore, how can I determine that a mobile client is browsing my site but that mobile client wants to access the "normal" version instead?"
The user of the mobile browser needs to indicate his or her SitePreference by submitting a query parameter named 'site_preference' with the string value 'normal'. This is generally achieved by having the user click somewhere on the footer, for example, like you see at the bottom of http://speakerrate.com (View: Normal | Mobile). The lite-showcase sample provides a barebones demonstration of this. The indicated SitePreference will be saved in a cookie so it is remembered on future requests. All of this requires a SitePreferenceHandlerInterceptor (or SiteSwitcherHandlerInterceptor if you also want domain switching) to be plugged-in and declared after your DeviceResolverHandlerInterceptor.
In general, the site preference management behavior is now much better described in the reference manual, which has gotten a significant update in the 1.0.0.M3 release.
Let me know if I am missing something.
BTW, a side note: you can inject a "Model" reference instead of a ModelMap, which reads a bit better in the code.
Last edited by Keith Donald; Feb 4th, 2011 at 09:47 AM.
Core Spring Development Team