2015-02-27 5 views
0

J'essaie de définir l'état d'un widget personnalisé Vaadin à partir d'un clic généré par l'utilisateur. Dans le connecteur du composant après l'instanciation du serveur rpc, j'obtiens le bouton GWT et j'ajoute une méthode onclick. Dans la méthode, je définis l'état (getState.text = "new text";) mais lorsque j'essaie de l'obtenir du côté serveur, j'obtiens le texte d'état d'origine. La méthode onStateChange n'est pas déclenchée.Modifier l'état d'un widget personnalisé Vaadin dans le connecteur via un clic GWT et le faire côté serveur

code dans le connecteur:

 getWidget().getSaveButton().addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent event) { 
      alert("does it work without jquery?"); 
      getState().text = "text changed from connector"; 
      getWidget().getTextBox().setText(getState().text); 
     } 
    }); 

après avoir cliqué sur le bouton GWT la zone de texte contient le texte "texte modifié du connecteur"

Dans l'état:

public String text = "original state text"; 

La mise en œuvre de l'interface utilisateur pour obtenir l'état:

vaadinButton.addClickListener(new ClickListener() { 

     @Override 
     public void buttonClick(ClickEvent event) { 
      Notification.show(sig.getState().text); 

     } 
    }); 

Lorsque vous cliquez sur le bouton vaadin après avoir cliqué sur le bouton GWT, la notification affiche toujours le "texte d'état d'origine". Comment puis-je changer l'état du connecteur afin qu'il déclenche la méthode onStateChange et que le texte change côté serveur?

Répondre

1

Il n'est pas possible de mettre à jour l'état du côté client. Seul le serveur peut mettre à jour l'état. Vous devriez faire en sorte que vous envoyiez une requête RPC du client au serveur, et sur le serveur, vous mettez à jour la valeur à indiquer.

Edit, voici un exemple sur la façon d'envoyer une valeur du client au serveur en utilisant le mécanisme RPC de Vaadin:

Créer une interface extension ServerRpc:

public interface MyServerRpc extends com.vaadin.shared.communication.ServerRpc { 
    void setValue(String value) 
} 

Utilisez un proxy créé à partir de l'interface ci-dessus pour envoyer de la valeur au serveur. Cet appel est fait à l'intérieur du connecteur.

getRpcProxy(MyServerRpc.class).setValue("New value to server"); 

une implémentation d'inscrire l'interface à votre composant côté serveur pour recevoir des appels RPC:

registerRpc(new MyServerRpc() { 

    public void setValue(String value) { 
    // set the value to state here by saying getState().myValue = value; 
    // or do something else 
    } 
}); 
+0

Merci beaucoup Henri. Cela fait un petit moment que je t'ai vu. Je suis le cracheur de café de la classe de New York – FCoffee

+0

@FCoffee, hah, j'espère que tout va bien là-bas. –

+0

Les choses vont bien. Le problème que je veux résoudre, c'est que j'essaie d'obtenir une chaîne JSON à partir du widget côté client. Selon votre réponse, je ne peux pas le faire à travers l'état. Est-ce la seule façon de faire ces composants Vaadin préexistants? Comme en prendre la chaîne json et placez-le dans un TextArea Vaadin, puis obtenez le texte côté serveur. Je placerais probablement le widget personnalisé dans un composant composite avec une TextArea. – FCoffee