结合SEAM使用GWT

结合SEAM使用GWT,gwt,seam,Gwt,Seam,我想将GWT与seam框架一起使用,因此我将jar GWT-user-2.2.0.jar添加到我的项目中。但是,当我从视图(xhtml页面)调用任何方法时,会发生以下异常: 原因:java.lang.UnsupportedOperationException:错误:GWT.create()仅在客户端代码中可用!例如,不能从服务器代码调用它。如果正在运行单元测试,请检查测试用例是否扩展了GWTTestCase,以及是否未从初始值设定项或构造函数中调用GWT.create()。 位于com.goog

我想将GWT与seam框架一起使用,因此我将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}" />


谢谢你的帮助

GWT是客户端技术—您编写的java代码可编译为js+html并在浏览器中执行

OTOH,SEAM是服务器端技术—当发出请求并生成HTML时,您编写的代码将在服务器上执行,HTML将返回到浏览器进行显示

从这个意义上讲,GWT和Seam不能很好地结合在一起。当然,不能在同一编译单元中混合使用代码

您可以将Seam用于服务器端REST,并在客户端使用GWT来使用REST,但这只有在您已有Seam REST代码的情况下才有意义


如果您已经编写了一些GWT代码,并且希望将其包含在html页面中(静态页面或Seam生成的页面),那么可以将它们用作GWT主机页面—您只需在页面中包含脚本标记以包含GWT js代码:

GWT和Seam实际上可以协同工作,正如您在中的本页面中所看到的

然而,看起来您正在尝试做的事情,在我看来,问题在于您正在尝试混合JSF和GWT。您正试图从JSF调用Seam操作,该操作调用一些GWT代码。因此,您的服务器端Seam代码正在调用客户端GWT代码,您得到的异常是
GWT.create()仅在客户端代码中可用!例如,无法从服务器代码调用它。我不知道你为什么要这么做

JSF是一种客户端技术,用XHTML编写。GWT也是一种用Java编写的客户端技术。我不知道这两个怎么配合


另一方面,根据上面的链接,GWT小部件没有理由不能调用Seam组件。您只需按照说明操作。

哪种版本的Seam?v2或v3?你能给出一个导致问题的代码示例吗?如果我们看不到可能包含问题的代码,就很难看出问题所在。我使用seam v2.2,我可以发布代码:@Name(“scheduleHandler1”)公共类SheduleHandler1实现可序列化的入口点{public void onModuleLoad(){MyPopup p p=new MyPopup();RootPanel.get().add(p)}从我的xhtml视图来看,我称此方法为:您是如何得到这个问题的答案的?嗨,Aaron,不幸的是,我没有找到这个问题的解决方案,我也没有时间找到如何解决它,所以我使用了richfaces模式面板,我可以从服务器端显示一个弹出窗口。