有以下代碼片段:更改faces-config.xml中從2.2至2.3的原因javax.el.PropertyNotFoundException:目標不可達,識別符 '豆' 解析爲空
豆:
import javax.faces.view.ViewScoped;
import javax.inject.Named;
@Named(value = "directoryBean")
@ViewScoped
public class DirectoryBean implements Serializable {
private static final long serialVersionUID = 1L;
....
}
面-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>
group.xhtml
<ui:composition ...>
<f:metadata>
<f:viewParam name="id" value="#{directoryBean.id}" />
</f:metadata>
</ui:composition>
在結果得到異常:
javax.el.PropertyNotFoundException: /group.xhtml @6,64 value="#{directoryBean.id}": Target Unreachable, identifier 'directoryBean' resolved to null
得到它從版本2.2改變faces-config.xml中爲版本2.3句法之後。
含義,與faces-config.xml中有以下內容一切正常:部署似鯖水狼牙魚4.1.2.172(全)服務器上,也
<faces-config version="2.2" 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_2.xsd">
....
</faces-config>
JSF 2.3.2加入的pom.xml與「提供」範圍。
....
<dependencies>
...
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.3.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>javax.faces-api</artifactId>
<version>2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
....
我已經檢查了所有的解決方案,我才能夠在幾個小時找到,包括不同版本的beans.xml的:
- 最初的beans.xml是不存在的項目 - 問題 堅持;
- 添加空beans.xml - 問題持續;
- 添加beans.xml,其中包含bean-discovery-mode的兩個不同選項 - 「all」 和「註釋」 - 問題依然存在; \ WEB-INF \ beans.xml中的
內容:
<?xml version="1.0" encoding="UTF-8"?>
<beans 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/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>
在測試了似鯖水狼牙魚4.1.2.172,GlassFish的5(java的版1.8.0_144)的本地實例,和似鯖水狼牙魚4.1的遠程實例.2.172(java ver 1.8.0_131)。
謝謝!
注意:像這樣的https://github.com/AnghelLeonard/JSF-2.3/tree/master/JSF23InjectInConverterValidator這樣的示例項目會給出相同的錯誤。
你只需要改變的面孔,配置?這意味着你已經在JSF 2.3.2發行版中,只是改變了faces-config? – Kukeltje
是的,確切!將faces-config恢復爲JSF 2.2語法 - 解決了這個問題。 –
一個小的快速谷歌搜索結果中的:https://stackoverflow.com/questions/44064995/jsf-2-3-not-finding-my-named-cdi-1-2-managed-bean。你是否也在使用「外部」JSF庫?一個在你的webapp中提供? – Kukeltje