Je me demandais si quelqu'un a déjà résolu ceci. J'ai une application Je sais qu'un simple si em> dans une implémentation du contrôleur peut faire l'affaire, mais je cherche quelque chose de plus flexible / élégant (une implémentation spécifique de la vueSolver, ou un intercepteur peut-être). p>
L'aide sera grandement appréciée ... comme toujours =) p>
C'est une très vieille question. Ce que vous devez faire est d'utiliser Spring-Mobile pour y parvenir de manière élégante standard p>
4 Réponses :
Mise à jour: regardez Spring-Mobile A > p>
Réponse originale: p>
Il serait assez simple de créer une vue personnalisée Viewresolver code> qui résout la vue basée sur l'en-tête code> utilisateur utilisateur code>. p>
null code>, laissant ainsi d'autres résolveurs résoudre une vue. Li>
Ok, juste une préoccupation à ce sujet ... Dois-je toujours avoir accès à la demande HTTP sur la vueResolver, si oui, comment l'accéder sans le transmettre spécifiquement sur chaque contrôleur?
Vous pouvez obtenir la demande à partir de demandeurs code> (jeter les attributs à
servleRequestatTtributes code>)
Oui, mais cela ne peut être fait qu'au niveau du contrôleur, la vueResolver ne reçoit plus le HTTPServletQuest à moins que vous ne le transmettez dans le modèle, qui est quelque chose qui peut ne pas être souhaitable.
@CHEPEPCH Alors vous dites qu'il n'y a rien dans RequestAttributeholder code> dans la vue Viewresolver? C'est surprenant.
Ce n'est pas :) Le déminentTributeholder est une classe parfaitement valide
OK, j'ai trouvé une réponse plus spécifique. Il y a un problème avec la solution proposée à Bozho. Le fait que les Ainsi, c'est une très élégante et facile à mettre en œuvre Solution A >. De manière fondamentale, cela implique une vue personnaliséeResolver (comme Bozho proposé), mais elle ajoute un intercepteur de manutention qui ajoute l'agent utilisateur au modèle afin que vous n'ayez plus besoin de l'ajouter manuellement. P>
J'aime @bohzo et vous avez déjà dit que Spring-Mobile est la voie à suivre. P>
à partir de la version 1.1, vous pouvez utiliser LITHEDIEDELÉGATISVIEWRESOLVER Pour configurer le type de comportement que vous décrivez. P>
Spring Mobile inclut AbstractDetieDélégadifierViewresolver, une wrapper abstraiteResolverResolver qui déléguette à une autre vue de la mise en œuvre du résolveur, permettant la résolution des noms de vue spécifiques de périphérique sans qu'il soit nécessaire de définir un mappage dédié pour chaque vue. Une implémentation légère est fournie, qui prend en charge l'ajustement des noms de vue selon que le périphérique d'appel est normal, mobile ou tablette. P>
Dans votre application, vous pouvez ensuite créer des vues alternatives pour des périphériques normaux, mobiles ou de tablettes, puis de la configuration appropriée, Spring Mobile ajustera le nom de la vue pour résoudre le bon. Cela se produit en interne, sans qu'il soit nécessaire d'ajouter une logique conditionnelle à travers vos contrôleurs. P> blockQuote>
Pour accéder à la demande actuelle à l'intérieur de la vueSolvers. P>
xxx pré> blockQuote>
Je pense que c'est une bonne idée. J'ai créé Un problème de jira pour cela.