h:outputText
标记value="#{myBean.message}"
SessionScoped
的字符串属性创建ManagedBean
MyBean
message
;创建getter和setter;使其实施Serializable
Stateless
注释创建SessionBean
MyBean
并将其注入@EJB
这是正常的吗?或者我做错了什么?
这是我的代码:
Index.xhtml (正文部分)
<h:body>
<h:outputText value="#{myBean.message}"></h:outputText>
</h:body>
MyBean.Java
@ManagedBean
@SessionScoped
public class MyBean implements Serializable {
@EJB NewSessionBean nsb;
public String getMessage() {
return " " + nsb.toString();
}
public MyBean() {
}
}
NewSessionBean.java
@Stateless
@LocalBean
public class NewSessionBean {
}
为了获取错误,只需加载网页,在消息字符串中添加空格,保存java文件(自动部署切换,否则手动重新部署)。
有些例外
EJB5014: Exception resolving object
java.lang.NullPointerException at
com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate$SerializableLocalObjectDelegate.createObject(EJBLocalObjectInvocationHandlerDelegate.java:158)
IOException while loading persisted sessions: java.io.IOException
java.io.IOException
at com.sun.ejb.base.io.EJBObjectInputStream.resolveObject(EJBObjectInputStream.java:114)
更新
如果我将ManagedBean
注释替换为Named
,因此使用CDI
,然后将javax.faces.bean.SessionScoped
替换为javax.enterprise.context.SessionScoped
,我遇到完全相同的问题取消部署,后续应用程序运行顺利。
抛出的异常与之前完全相同。
答案 0 :(得分:0)
您的服务器尝试序列化并保存http会话。您的会话bean应该可序列化以使会话持久性可用。 Ir看起来像这个引用:NewSessionBean nsb;不可序列化。你可以让它瞬态,你应该摆脱错误。但是在sesson恢复之后,nsb将为null。我不确定它是如何在EJB中处理的,但必须以某种方式重新注入此引用。