嘿伙计们,我刚刚开始使用GWT,当我在Eclipse中运行项目时出现以下错误
19:36:16.084 [ERROR] [adaptivgwt] 警告: com.google.gwt.user.client.ui.RootPanel 后代将是错误的 定位,即不相对于他们的 父元素,何时 'position:static',这是CSS 默认,有效。一种可能 修复就是打电话 'panel.getElement()。getStyle()的。setPosition两种(Position.RELATIVE)'
java.lang.IllegalStateException: com.google.gwt.user.client.ui.RootPanel 缺少CSS '位置:{相对的,绝对的,固定}' 在com.google.gwt.user.client.ui.AbsolutePanel.verifyPositionNotStatic(AbsolutePanel.java:279) 在com.google.gwt.user.client.ui.AbsolutePanel.add(AbsolutePanel.java:118) 在com.ivstel.adaptiv.client.AdaptivGWT.loadLogin(AdaptivGWT.java:29) 在com.ivstel.adaptiv.client.AdaptivGWT.onModuleLoad(AdaptivGWT.java:21) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法) at sun.reflect.NativeMethodAccessorImpl.invoke(未知 资源) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知 资源) 在java.lang.reflect.Method.invoke(未知 资源) 在com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) 在com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:183) 在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:510) 在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) 在java.lang.Thread.run(未知来源)
这就是我entry point的样子:
public class AdaptivGWT implements EntryPoint {
private static AdaptivGWT singleton;
public static AdaptivGWT get() {
return singleton;
}
public void onModuleLoad() {
singleton = this;
loadLogin();
}
public void loadLogin() {
RootPanel.get("login").clear();
RootPanel.get("main").clear();
LoginGWT login = new LoginGWT();
RootPanel.get("login").add(login, 10, 10);
}
public void loadMain(User user) {
RootPanel.get("login").clear();
MainGWT main = new MainGWT();
RootPanel.get("main").add(main, 10, 10);
}
}
HTML文件。
<!doctype html>
<!-- The DOCTYPE declaration above will set the -->
<!-- browser's rendering engine into -->
<!-- "Standards Mode". Replacing this declaration -->
<!-- with a "Quirks Mode" doctype may lead to some -->
<!-- differences in layout. -->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="AdaptivGWT.css">
<title>Adaptiv</title>
<script type="text/javascript" language="javascript" src="adaptivgwt/adaptivgwt.nocache.js"></script>
</head>
<body>
<!-- OPTIONAL: include this if you want history support -->
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
<!-- RECOMMENDED if your web app will not function without JavaScript enabled -->
<noscript>
<div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
Your web browser must have JavaScript enabled
in order for this application to display correctly.
</div>
</noscript>
<div id="login"></div>
<div id="main"></div>
</body>
</html>
答案 0 :(得分:3)
使用位置参数(即10,10)和add
方法要求将要添加GWT小部件的元素作为子元素,也需要定位元素(即它们必须具有属性:{{ 1}})。在你的情况下,div(包括id main和login)都没有位置。更好地使用position:
。如果要将元素放置在左/上10像素,请使用css边距或填充(取决于您的用例)。
另一方面,没有必要同时使用'login'和'main'div,你可以简单地使用一个div,或直接将它添加到正文中,即使用add(main)
。这样你就可以在GWT中拥有完全控制权,而不是在html文件中拥有部分结构。