GWT le fait d'emblée via une fonctionnalité appelée liaison différée
Lors de la compilation d'une application GWT, le compilateur génère en fait différentes versions du code ciblé pour chaque navigateur différent. Ceci est fait automatiquement avec les composants GWT qui prennent soin des détails sanglants des différents navigateurs.
Cette fonctionnalité peut être étendue pour produire des compilations arbitraires basées sur des propriétés personnalisées. Voici un exemple simplifié : supposons que vous ayez des définitions de vue différentes pour une vue normale et une vue détaillée.
public abstract class AbstractView { ....}
public abstract class NormalView extends AbstractView { ... }
public abstract class DetailedView extends AbstractView { ....}
vous pouvez créer une définition de module qui générera deux versions différentes, l'une utilisant l'option NormalView
l'autre en utilisant la DetailedView
(dans votre fichier gwt.xml)
<define-property name="customMode" values="normal,detailed" />
<replace-with class="com.example.NormalView">
<when-type-is class="com.example.AbstractView" />
<when-property-is name="customMode" value="normal" />
</replace-with>
<replace-with class="com.example.DetailedView">
<when-type-is class="com.example.AbstractView" />
<when-property-is name="customMode" value="detailed" />
</replace-with>
en utilisant
AbstractView view = GWT.create(AbstractView.class);
fournira l'instance appropriée au moment de l'exécution.
C'est à vous d'encapsuler votre code spécifique au client dans des classes spécifiques, et d'exposer des interfaces communes pour les différentes implémentations.
Vous devrez également sélectionner la version compilée appropriée en fonction du client en cours de visualisation (vous pouvez utiliser jsp pour cela).
veuillez ne pas considérer les exemples de code ci-dessus comme testés, il peut y avoir des problèmes de syntaxe, ils sont juste destinés à transmettre l'idée générale.
Un backend JSP est un environnement d'hébergement idéal pour une application GWT, vous pourrez profiter du mécanisme requestfactory pour une communication facile entre le client et le serveur.
Il est évident qu'il y a une courbe d'apprentissage ici, mais l'IMO documentation officielle est un bon point de départ.