我正在尝试创建可伸缩的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。
我该怎么办?
我知道我可以使用带有Seam Faces或CODI的CDI ViewScoped,但我想最大限度地减少依赖。
我还可以等待JEE7,它将为CDI提供@ViewScoped,但我们不会在几个月之前使用JEE7。
更新:
我只是想补充一点,我正在使用捆绑在jar中的嵌入式EJB,它本身与我的战争有关。
NotSerializableException的堆栈跟踪具有以下消息:
com.company.core.service.__EJB31_Generated__SomeService__Intf____Bean__
答案 0 :(得分: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目录中。