【发布时间】:2018-04-17 05:16:22
【问题描述】:
我在 JSF 2.3 和 CDI 应用程序中发现 bean 时遇到问题。我正在使用 Glassfish 5.0、Java 8 (1.8.0_151)。我的文件:
faces-config.xml
<?xml version='1.0' encoding='UTF-8'?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_3.xsd"
version="2.3">
</faces-config>
LocaleBean:
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class LocaleBean implements Serializable {
}
向此 bean 提交表单后 Glassfish 日志中的消息:
javax.el.PropertyNotFoundException: /home.xhtml @15,81 value="#{localeBean.language}": 目标不可达,标识符“localeBean”解析为空
仅当我使用下面列出的导入而不是 javax.enterprise.context 包中的 @Named 和 @SessionScoped 时,表单提交才有效。
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
但两者在 JSF 2.3 中都已弃用。
有什么想法吗?谢谢!
【问题讨论】:
-
我会说它更类似于:stackoverflow.com/questions/45682309/… 因为使用 JSF 2.3 和 CDI。
-
啊,
@ManagedBean已过时(JSF 2.0)。您需要改用@Named。并注意正确的*Scoped用法,这似乎是这种情况。这是混合 JSF 2.2 和 JSF 2.0 标记的常见错误,它们总是不兼容。
标签: jsf cdi mojarra propertynotfoundexception jsf-2.3