HTTPSession avec GWT
Je suis nouveau dans GWT ... je tiens à mettre en œuvre des séances dans mon Application Web
Fondamentalement, je veux que la session commence par un clic de bouton (gérer un événement) et se termine au clic d'un bouton (d'autres de gérer un événement).
C'est possible?
Comment le faire étape par étape?
Est-il acceptable de ce code?:
Principale (côté client):
Button b1 = new Button("b1");
b1.addClickHandler(new ClickHandler) {
public voin onClick(){
...
rpc.setSession(callback); //rpc call the service...
}
}
Button b2 = new Button("b2");
b1.addClickHandler(new ClickHandler) {
public voin onClick(){
...
rpc.exitSession(callback);
}
}
//------------------------------------------------------------------------------------
import com.google.gwt.user.client.rpc.RemoteService;
public interface MySession extends RemoteService {
public void setSession();
public void exitSession();
}
//------------------------------------------------------------------------------------
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface MySessionAsync {
void setSession(AsyncCallback<Void> callback);
void exitSession(AsyncCallback<Void> callback);
}
//------------------------------------------------------------------------------------
import de.vogella.gwt.helloworld.client.MySession;
public class MySessionImpl extends RemoteServiceServlet implements MySession {
HttpSession httpSession;
@Override
public void setSession() {
httpSession = getThreadLocalRequest().getSession();
httpSession = this.getThreadLocalRequest().getSession();
httpSession.setAttribute("b", "1");
}
@Override
public void exitSession() {
httpSession = this.getThreadLocalRequest().getSession();
httpSession.invalidate(); //kill session
}
}
Ce que je fais c'est me connecter avec mon application Web à une autre page web, si je clique sur le bouton retour du navigateur que je retourne à mon application web avec la session encore en vie ... Comment puis-je faire?
J'espère avoir bien expliqué ce que mon problème ...
*****NOUVEAU PROBLÈME***:**
J'ai essayé de le faire ...
---côté client....
PRINCIPAL:
MyServiceAsync service = (MyServiceAsync) GWT.create(MyService.class);
ServiceDefTarget serviceDef = (ServiceDefTarget) service;
serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL()+ "rpc");
boolean b=false;;
b=service.checkSession(new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
//here is the result
if(result){
//yes the attribute was setted
}
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
});
if (b==false){ //se non esiste una sessione
RootPanel.get().add(verticalPanel);
RootPanel.get().add(etichetta);
RootPanel.get().add(nameField);
RootPanel.get().add(sendButton);
RootPanel.get().add(horizontalPanel);
}
else{ //esiste già una sessione attiva (pagina da loggato)
welcome.setText("Ciao "+userCorrect+"!!");
RootPanel.get().add(verticalPanelLog);
RootPanel.get().add(etichetta);
RootPanel.get().add(nameField);
RootPanel.get().add(cercaLog);
RootPanel.get().add(horizontalPanel);
}
////////////////////////////////////////////////////////////////////////
public interface MyServiceAsync {
...
void exitSession(AsyncCallback<Void> callback);
void setSession(AsyncCallback<Void> callback);
void checkSession(AsyncCallback<Boolean> callback); //error!!
////////////////////////////////////////////////////////////////////////
public interface MyService extends RemoteService {
/.....
public void setSession();
public void exitSession();
public boolean checkSession();
////////////////////////////////////////////////////////////////////////
côté serveur:
public boolean checkSession() {
httpSession = this.getThreadLocalRequest().getSession();
//se la sessione esiste già
if (httpSession.getAttribute("b")!= null){
return true;
}
else{ .
return false;
}
OriginalL'auteur JackDaniels | 2011-01-15
Vous devez vous connecter pour publier un commentaire.
session en GWT est similaire à la session en servlet. La différence est dans le servlet vous appelez
HTTPSession session = request.getSession();
dans gwt vous appeler
HttpServletRequest request = this.getThreadLocalRequest();
pour obtenir la demande, puis de nouveaurequest.getSession();
dans votre situation, vous devez appeler RPC lorsque cliquez sur le bouton et de gérer la session sur le serveur le code précédent et appeler un autre RPC lorsque vous cliquez sur un autre bouton et annuler la session. Voici un exemple;
Ce lien peut-être utile de vous À l'aide de Servlet Sessions dans GWT
Edit :
Si vous voulez tester si la session
isExist()
ou de ne pas essayer cetteajouter à votre interface
boolean test(String attr);
ajouter à votre .async ajouter
void test(String attr, AsyncCallback<Boolean> callback);
ajouter à votre .impl
et il suffit d'appeler
par exemple...j'ai de l'interface 'MySession", "MySessionAsync" dans le côté client, et j'ai "MySessionImpl" côté serveur. Que dois-je mettre dans ces conteneurs?
oui il doit être inclus dans le "impl". vous ne pouvez pas le faire sur le côté client. Pour toutes les actions de serveur, vous devez appeler rpc
J'ai essayé d'écrire quelque chose. Est-il correct"?
vous êtes les bienvenus. ça me fait plaisir que vous apprenez quelque chose de nouveau
OriginalL'auteur