我在同一个模块中有多个入口点。
例如,我有主页的主页入口点和管理员 管理页面的入口点。
<entry-point class='com.company.project.client.HomeModule'/>
<entry-point class='com.company.project.client.AdminModule'/>
我现在的安装方式 - 我需要在我的内容中查看这样的内容 OnModuleLoad:
if((RootPanel.get("someHomeWidget")!=null)&&
(RootPanel.get("someOtherHomeWidget")!=null))
{
// do the stuff
}
以便在Home时不执行Admin Entrypoint 页面被打开,反之亦然。
不进行上述检查也涉及到如果我有一个div 无论我注入的是Home和Admin页面中的相同名称 它每个都出现两次。
这在1000英里之外发臭,显然是错误的:这是正确的 在人们体验中这样做的方法?
任何帮助表示赞赏!
答案 0 :(得分:8)
正确的方法是每个模块有一个入口点,将相应的小部件粘贴在适当的div中:
RootPanel panel = RootPanel.get("someHomeWidget");
if (panel) panel.add(new HomeWidget());
panel = RootPanel.get("adminWidget");
if (panel) panel.add(new AdminWidget());
这样它只扫描页面,查找你拥有的任何div,并插入适当的小部件。因此,您的HTML页面确定何时显示哪些小部件,并且GWT代码已准备好处理任何情况。上面没有什么东西发臭,这是你的入口点应该写的方式。
另一种方法是,如果你的管理区域和正常区域完全不同(例如:你想在不同时间加载它们)那么它们应该是单独的模块,具有单独的入口点。
答案 1 :(得分:4)
我还想在GWT玩具应用程序中使用多个页面,我想我已经弄明白了。它需要对部署描述符(myApp.gwt.xml)进行一些按摩,但这就是我所做的。
有效。只需复制gwt.xml并为模块提供新名称以与新应用页面一起使用。我看了一些其他的链接,我可能已经完成了所描述的内容,但是有太多的单词和重定向等等(即我没有真正读过任何内容)。我正在为Galileo使用最新的GWT插件,所以现在可能是IJW。
答案 2 :(得分:1)
不要将管理员和主页视为不同的页面。页面概念不适用于GWT,因为只有一个页面,即单个入口点。 如果要实现不同页面的效果,请使用GWT的URL重写功能。
如果您确实想使用不同的入口点,那么如上面的评论中所述,使用不同的模块。
答案 3 :(得分:1)
通常只有一个EntryPoint会更好。一个模块中的多个EntryPoints都在同一时间开始,有时可以执行您不期望的事情。
您有很多选择如何单独处理它: - 有2个不同的编辑,一个用于管理员,一个用于家庭应用程序。 - 使用历史记录标记表示您需要管理员或主页 - 检查JS变量以显示其中一个 - 检查是否存在特定的DIV ID以显示Admin或Home(RootPanel.get(id)) - 使用URL参数指示应用程序。 - ......等
答案 4 :(得分:1)
有一种简单(棘手)的方法可以实现这一目标:
制作主要课程您的入门点。
<module rename-to='gwt'>
<inherits name='com.google.gwt.user.User'/>
<entry-point class='com.example.client.Main'/>
<source path='client'/>
<source path='shared'/>
</module>;<br/>
创建此Main.java以像调度程序一样工作:
package com.example.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
public class Main implements EntryPoint {
public void onModuleLoad() {
String url = Window.Location.getHref();
if ( url.indexOf("?install")>-1 ) {
Install install = Install.getInstance();
RootPanel.get().add(install);
else if ( url.indexOf("?admin")>-1 ) {
Admin admin = Admin.getInstance();
RootPanel.get().add(admin);
} else {
Application app = Application.getInstance();
RootPanel.get().add(app);
}
}
}
现在不同的类是Application,Admin和Install 工作就像单独的单位。
以下是一个简单的安装:
package comexample.client;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
public class Install extends FlowPanel {
/** Singleton stuff - to access Main from all subclasses! */
private static Install singelton;
public static Install getInstance() {
if (singelton == null) {singelton = new Install();}
return singelton;
}
/** Constructor - called by Main.onModuleLoad() */
private Install() {
this.add(new HTML("<h1>Do whatever You have to do!</h1>"));
}
}
你不需要Singleton的东西(getInstance),但它在大型应用程序中非常方便。
现在在/ war-directory中创建名为install和admin的目录,并在其中创建一个像这样的HTML页面:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=/index.html?install">
</head>
<body></body>
</html>
因此,当用户将他的浏览器指向http://www.example.com/install时,他将被重定向到http://www.example.com/index?install并且index.html绑定到Main.java,它将调度请求并加载Install.java
答案 5 :(得分:0)
我的博客上有解决方案。您可以下载具有多个入口点并使用URL重写的示例maven项目。看看:http://zenoconsulting.wikidot.com/blog:16
答案 6 :(得分:0)
你有没有试过这个框架? http://gwtmultipage.org/ 克劳