Я новичок в GWT ... Я хотел бы реализовать сеансы в своем веб-приложении В принципе, я хочу, чтобы сеанс начинался одним нажатием кнопки (обрабатывать событие) и заканчивался нажатием кнопки другая кнопка (другое событие - событие). Возможно?HTTPSession с GWT
Как это сделать шаг за шагом?
Это хорошо этот код ?:
Main (на стороне клиента):
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
}
}
Что Я делаю, я подключаюсь к своему веб-приложению на другую веб-страницу, если я нажму кнопку «Назад» браузера, которую я верну в свое веб-приложение с еще живым сеансом ... Как я могу это сделать?
Я надеюсь, что я хорошо объяснил, что моя проблема ...
***** NEW ПРОБЛЕМА *** **
Я пытался сделать это ...
--- стороне клиента .... MAIN:
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();
////////////// ////////////////////////////////////////////////// ////////
стороне сервера:
public boolean checkSession() {
httpSession = this.getThreadLocalRequest().getSession();
//se la sessione esiste già
if (httpSession.getAttribute("b")!= null){
return true;
}
else{ .
return false;
}
Привет Хилал, спасибо за ответ ... но я не понимаю:. HttpSession HTTPSession = getThreadLocalRequest() getSession () должны быть включены в «impl» на стороне сервера справа? Если не слишком много проблем, не могли бы вы привести мне пример кнопок «RPC call» внутри? Спасибо – JackDaniels
например ... У меня есть интерфейс «MySession», «MySessionAsync» на стороне клиента, и у меня есть «MySessionImpl» на серверной стороне. Что я должен положить в эти контейнеры? – JackDaniels
Да, он должен быть включен в «impl». вы не можете сделать это на стороне клиента. Для каждого действия сервера вы должны позвонить rpc –