我是新来的..。我想在我的Web中实现会话,基本上,我希望会话从单击按钮(处理事件)开始,并在单击另一个按钮(其他处理事件)时结束。有可能吗?
如何一步一步地做?
这个密码可以吗?:
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
}
}我所做的是将我的Web应用程序连接到另一个网页,如果我单击浏览器的后退按钮,然后返回到我的web应用程序,而会话仍然活着.我该怎么做?
我希望我能很好地解释我的问题..。
新问题*
我试过这样做..。
--客户端.主营:
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();////////////////////////////////////////////////////////////////////////
server-side:
public boolean checkSession() {
httpSession = this.getThreadLocalRequest().getSession();
//se la sessione esiste già
if (httpSession.getAttribute("b")!= null){
return true;
}
else{ .
return false;
}发布于 2011-01-15 09:16:12
GWT中的会话类似于servlet中的会话。不同之处在于您调用的servlet
HTTPSession session = request.getSession();
在你的电话里
HttpServletRequest request = this.getThreadLocalRequest();获取请求,然后再获得request.getSession();
在您的情况下,您应该在单击该按钮时调用RPC,并将前面的代码管理服务器上的会话,并在单击另一个按钮并使会话无效时调用另一个RPC。这是一个例子;
Button b1 = new Button("b1");
b1.addClickHandler(new ClickHandler) {
// call RPC and
// session = this.getThreadLocalRequest().getSession();
// session.setAtribute("b", "1");
}
Button b2 = new Button("b2");
b1.addClickHandler(new ClickHandler) {
// call RPC and
// session = this.getThreadLocalRequest().getSession();
// session.invalidate(); // kill session
}这个链接可能对你的在GWT中使用Servlet会话有帮助。
编辑:
如果要测试会话isExist()是否尝试以下操作
添加到您的接口boolean test(String attr);
添加到.async中添加void test(String attr, AsyncCallback<Boolean> callback);
添加到您的.impl
@Override
public boolean test(String attr) {
return session.getAttribute(attr) != null;
}然后打电话
Rpc.test(attribute, 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());
}
});https://stackoverflow.com/questions/4698658
复制相似问题