Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF2.3Don';不要在Tomcat 8上工作_Jsf_Jakarta Ee_Tomcat8_Jboss Weld_Jsf 2.3 - Fatal编程技术网

JSF2.3Don';不要在Tomcat 8上工作

JSF2.3Don';不要在Tomcat 8上工作,jsf,jakarta-ee,tomcat8,jboss-weld,jsf-2.3,Jsf,Jakarta Ee,Tomcat8,Jboss Weld,Jsf 2.3,我试图在Tomcat8上测试JSF2.3的新特性,但没有任何效果。 与JSF2.2兼容的代码可以很好地使用此配置,但对于新的JSF2.3功能,它失败了。 例如,以下代码导致启动应用程序失败。 WELD-001408:type FacesContext与限定符@Default的未满足依赖关系 我的配置文件如下。 POM.xml文件 我做错了什么?使用新的Glashfish应用服务器。它叫Payara服务器。这太棒了。您需要激活JSF2.3,默认情况下它与JSF2.2兼容 添加如下所示的类: @F

我试图在Tomcat8上测试JSF2.3的新特性,但没有任何效果。
与JSF2.2兼容的代码可以很好地使用此配置,但对于新的JSF2.3功能,它失败了。
例如,以下代码导致启动应用程序失败。

WELD-001408:type FacesContext与限定符@Default的未满足依赖关系


我的配置文件如下。
POM.xml文件


我做错了什么?

使用新的Glashfish应用服务器。它叫Payara服务器。这太棒了。

您需要激活JSF2.3,默认情况下它与JSF2.2兼容

添加如下所示的类:

@FacesConfig(version = Version.JSF_2_3)
@ApplicationScoped
public class JSF23Activator {
}
另一个提示:

  • 检查WEB-INF文件夹中是否有“faces config.xml”文件(具有2.3架构)
  • 检查WEB-INF文件夹中是否有“beans.xml”文件(具有“bean discovery mode=“all”属性)

关于Activator,您将了解更多详细信息。

正如堆栈跟踪中指出的那样,javax中的依赖验证api jar似乎丢失了。您必须将其添加为依赖项。我相信在这种情况下,验证api jar是不必要的。无论如何,我尝试添加这个api,但它给了我同样的错误。看起来jsf2.3中引入了CDI的新特性,这与早期版本不同。facescontext注入在JSF2.3中似乎没有任何限定符,如“@Default”或“@any”。您可能必须删除限定符。请看我不明白我必须删除哪些限定符。我的代码与Arjan Tijms在下面的链接中显示的代码相同。从stacktrace看,您有“@Inject@Any”私有bean.PhonePrefixServiceBean.facesContext。如果是这样,则“@Any”是一个限定符。OP还应该删除重复的JSF API依赖项。
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/JSF23"> 
    <Resource auth="Container"
              factory="org.jboss.weld.resources.ManagerObjectFactory"
              name="BeanManager"
              type="javax.enterprise.inject.spi.BeanManager"/>
</Context>
<?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"
       version="1.2"
       bean-discovery-mode="all">
</beans>
    <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>JSF 2.3</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>    
    <listener>
        <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
    </listener>
    <resource-env-ref>        
        <resource-env-ref-name>BeanManager</resource-env-ref-name>
        <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
    </resource-env-ref>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
</web-app>
package es.prueba.jsf23;

import javax.enterprise.context.ApplicationScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;

@ApplicationScoped
public class ApplicationBean {

    @Inject
    private FacesContext facesContext;

    public FacesContext getFacesContext() {
        return facesContext;
    }

    public void setFacesContext(FacesContext facesContext) {
        this.facesContext = facesContext;
    }    
}
@FacesConfig(version = Version.JSF_2_3)
@ApplicationScoped
public class JSF23Activator {
}