我想将GWT与seam Framework一起使用,所以我将jar gwt-user-2.2.0.jar添加到我的项目中。但是当我从视图(xhtml页面)调用任何方法时,会发生此异常:
引起:java.lang.UnsupportedOperationException:错误:GWT.create()仅在客户端代码中可用!例如,它不能从服务器代码中调用。如果您正在运行单元测试,请检查您的测试用例是否扩展了GWTTestCase,并且未在初始化程序或构造函数中调用GWT.create()。 在com.google.gwt.core.client.GWT.create(GWT.java:92) 在com.google.gwt.user.client.ui.UIObject。(UIObject.java:188) ......还有84个
我使用seam v2.2,我可以发布代码:
@Name("scheduleHandler1")
public class SheduleHandler1 implements Serializable,EntryPoint
{
public void onModuleLoad() {
MyPopup p = new MyPopup();
RootPanel.get().add(p);
}
从我的xhtml视图中我称之为:
<h:commandLink value="showPopup" action="#{scheduleHandler1.onModuleLoad}" />
感谢您的帮助。
答案 0 :(得分:0)
GWT是客户端技术 - 您编写的java代码编译为js + html并在浏览器中执行。
OTOH,SEAM是服务器端技术 - 当您发出请求并生成HTML并将其返回给浏览器进行显示时,您编写的代码将在服务器上执行。
从这个意义上讲,GWT和Seam并不顺利。当然,你不能在同一个编译单元中混合代码。
你可以在客户端使用Seam作为服务器端REST和GWT来使用REST,但这只有在你已经拥有现有Seam REST代码时才有意义。
如果您已编写了一些GWT代码并希望将其包含在您的html页面中(静态或由Seam生成),则将它们用作GWT主页 - 您只需在页面中包含脚本标记以包含GWT js代码:{{ 3}}
答案 1 :(得分:0)
GWT和Seam实际上可以一起工作,您可以在Seam Reference Documentation的此页面中看到。
但是,你试图做的事情,以及问题在我看来,是你试图混合JSF和GWT。您正尝试从JSF调用Seam操作,其中该操作调用一些GWT代码。因此,您的服务器端Seam代码正在调用客户端GWT代码,并且您获得了GWT.create() is only usable in client code! It cannot be called, for example, from server code
的异常。我不确定你为什么要这样做。
JSF是一种用XHTML编写的客户端技术。 GWT也是用Java编写的客户端技术。我不确定这些是如何一起玩的。
另一方面,根据上面的链接,没有理由为什么你的GWT小部件无法调用你的Seam组件。您只需按照说明操作即可。