我正在使用GWT和MVP制作一个网络应用程序。 我试图使用cookies,但我遇到了历史问题。 如果用户有cookie并登录到Web应用程序,应用程序会自动记录他,这很棒!现在由于某种原因,他有能力点击退格并返回历史记录!虽然在他登录时它是空的!
登录时的地址:... html?gwt.codesvr = 127.0.0.1:9997 #mainpage 地址由于某种原因保存在那里并弹出单击退格:... html?gwt.codesvr = 127.0.0.1:9997。
代码:
public void go(HasWidgets container) {
this.container = container;
if (History.getToken().isEmpty()) {
fetchCookie();
}
else {
History.fireCurrentHistoryState();
}
}
protected void fetchCookie()
{
String sessionID = Cookies.getCookie("username");
if (sessionID == null)
{
History.newItem("login");
}
else
{
.....
}
现在让我们说我不关心这个问题(但我确实如此)并在点击退格后尝试与网络应用互动,我得到一个例外: 捕获异常:此小部件的父级未实现HasWidgets。
所以我发布实现Composite的主页视图,并有一个SplitLayoutPanel:
Panel.add(books);
vPanel.add(chapters);
vPanel.add(textButton);
splitPanel = new SplitLayoutPanel();
assetPicPanel = new VerticalPanel();
titleAssetPic = new Label();
assetPicPanel.add(titleAssetPic);
vPanel.add(assetPicPanel);
assetVidPanel = new VerticalPanel();
titleAssetVid = new Label();
assetVidPanel.add(titleAssetVid);
vPanel.add(assetVidPanel);
assetAudioPanel = new VerticalPanel();
titleAssetAudio = new Label();
assetAudioPanel.add(titleAssetAudio);
vPanel.add(assetAudioPanel);
assetTextPanel = new VerticalPanel();
titleAssetText = new Label();
assetTextPanel.add(titleAssetText);
vPanel.add(assetTextPanel);
splitPanel.addWest(vPanel, 300);
assetLocationPanel = new VerticalPanel();
splitPanel.add(page);
page.setWidth("50%");
RootLayoutPanel rp = RootLayoutPanel.get();
rp.add(splitPanel);
initWidget(rp);
答案 0 :(得分:0)
您应该在入口点类的onModuleLoad()
方法中设置一个cookie - 它只在第一次加载应用程序时运行一次。绝对没有理由在每个导航操作上检查此cookie。
如果您担心在应用程序仍处于打开状态时可能需要踢出您的用户,则应该通过从RPC调用中抛出LoginException来执行此操作。无论如何,您必须检查每个RPC调用的凭据 - 否则任何人都可以在不打开您的应用程序的情况下使用它们。