将GWT与SEAM结合使用

时间:2011-08-11 11:19:52

标签: gwt seam

我想将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}" />

感谢您的帮助。

2 个答案:

答案 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组件。您只需按照说明操作即可。