0

我正在尝试创建一个可扩展的 JSF 应用程序。我想在客户端保存视图状态,但我在使用带有 CDI 注入属性的 ViewScoped ManagedBean 时遇到问题。

SomeService.java:

@Singleton
public class SomeService {
    // ...
}

SomeBean.java

@ManagedBean
@ViewScoped
public class SomeBean implements Serializable {

            @Inject
            private SomeService someService;
}

不幸的是 glassfish 无法序列化someService我不想被序列化但重新注入的序列化。

我试图使其瞬态,someService在反序列化后访问时最终导致 NullPointerException。

我该怎么办?

我知道我可以将 CDI ViewScoped 与 Seam Faces 或 CODI 一起使用,但我想最大程度地减少依赖关系。

我也可以等待 JEE7,它将为 CDI 提供 @ViewScoped,但我们不会在几个月前使用 JEE7。

更新
我只是想补充一点,我正在使用捆绑在一个 jar 中的嵌入式 EJB,该 jar 本身与我的战争相关联。NotSerializableException 的堆栈跟踪具有以下消息: com.company.core.service.__EJB31_Generated__SomeService__Intf____Bean__

4

1 回答 1

0

我不喜欢自己回答自己的问题,但经过更多研究后,我发现这是 Mojarra 2.1.6 中的一个错误(我使用的是 Glassfish 3.1.2.2),现在在 Mojarra 2.1.20 中已解决。

要更新 Mojarra,您只需下载更新版本(例如:https://maven.java.net/content/repositories/releases/org/glassfish/javax.faces/2.1.20/javax.faces-2.1.20。 jar ) 并将其作为 javax.faces.jar 放在 $GLASSFISH/modules 目录中。

于 2013-03-25T16:59:31.510 回答