Développement
Quelle histoire, ce sabotage de Google ! Un peu de sérieux, en attendant des nouvelles de ce cher Serge-Jean (plus facile à écrire qu’à dire !).
Je me suis fait avoir par quelque chose d’assez subtil avec GWT. En parsant du XML avec le XMLParser fourni par GWT, j’ai eu besoin de récupérer la valeur d’attributs optionnels. J’avais donc écrit des blocs de code qui ressemblent à peu près à ceci :
NamedNodeMap paramAttrs = paramNode.getAttributes(); String view = null; try { view = paramAttrs.getNamedItem("view").getNodeValue(); } catch (NullPointerException e) { }
En me disant que si un élément est null dans la chaîne d’exécution, alors view vaudrait tout simplement null. Ceci est valable en Java, mais une fois traduit en JavaScript par GWT, ça ne marche pas du tout. La solution est donc de tester « à la main » les valeurs nulles :
NamedNodeMap paramAttrs = paramNode.getAttributes(); Node item = paramAttrs.getNamedItem("view"); String view = item != null ? item.getNodeValue() : null;
Dans cet exemple, je vous l’accorde, ce n’est pas plus long et c’est même plus propre, mais j’avais un peu plus d’éléments dans ma ligne, et donc plusieurs valeurs (potentiellement nulles) à tester.
Je viens de passer un certain temps à me rendre compte que dans la méthode dragCancel() d’un objet DragListener la propriété component de l’objet DragEvent reçu en argument vaut null ! Donc si vous avez besoin de cette information, pensez à la stocker dans votre objet dans la méthode dragStart()…
Version de GXT : 1.2.3
L’utilisation d’un RowLayout dans un conteneur supprime la possibilité d’avoir une barre de défilement pour ce conteneur. En fait, la raison est assez simple : RowLayout calcule la position et la taille précises de chaque enfant, et c’est à chacun de ses enfants de gérer sa barre de défilement, au besoin.
Donc, si vous avez besoin d’une barre de défilement dans un panneau, n’utilisez pas RowLayout : dans la plupart des cas, un FlowLayout peut être préférable. Utiliser un FlowLayout revient à utiliser un RowLayout(Orientation.VERTICAL) avec des contraintes RowData(1, -1) pour chaque enfant (c’est-à-dire : utiliser toute la largeur disponible et laisser chacun des enfants calculer sa propre hauteur).
Il peut parfois être utile de savoir si l’on est en mode hosted ou en mode web dans une application GWT. En fait, cela m’est surtout utile pour faire des tests : en mode hosted (en cours de développement), j’attaque ma servlet de test et en mode web (déployé, donc), j’attaque la servlet réelle de l’application.
Pour cela, il faut utiliser la méthode statique isScript() de la classe GWT :
if ( GWT.isScript() ) { // Fonctionnement en mode web (déployé) }
