[英]@PostConstruct didn't get called by JSF if ManagedBean is inside jar library
我正在运行以下问题。
我有一些Managed Beans,目前在两个JSF应用程序之间共享。 由于我不想将代码复制并粘贴到两者中(未来会更多),我将这个共享的托管bean放在JAR库中。 我关注过这个博客: http : //jsflive.wordpress.com/2011/03/24/custom-component-library/
好吧,即使我把faces-config.xml放在JAR / META-INF / @ManagedBean中,@ ViewScoped也行不通。 我无法理解为什么,但如果我在faces-config.xml(JAR,而不是WAR)中注册bean,这个问题就会消失。
我可以忍受这个,但令我惊讶的是,没有为JAR库中的这个托管bean调用@PostConstruct注释。 我没有收到任何错误,警告或其他。 我想豆子正在加载,但他们的注释没有被处理。
谁有人面对这个?
我的环境:Glassfish 3.1.1(build 12)JSF 2.1.3
提前致谢。
然后没有扫描@PostConstruct
注释。 这是导致您的@ManagedBean
注释和喜欢未被扫描的同一问题的结果。
导致此问题的原因有以下几种:
您在Jetty / Tomcat / JBoss AS上使用了Mojarra 2.1.0。 这是注释扫描程序中的一个非常具体的错误。 见问题1937 。
您的/WEB-INF/faces-config.xml
文件具有metadata-complete="true"
属性。 这与JSF 2.0规范中概述的第一个要求冲突:
11.5.1扫描注释类的要求
如果
WEB-INF/faces-config.xml
文件中的<faces-config>
元素包含值为“true”
metadata-complete
属性,则实现不得对任何类执行注释扫描,除了实现提供的那些类本身。 否则,继续如下。如果运行时发现应用程序配置资源中的条目与注释之间存在冲突,则应用程序配置资源中的条目优先。
必须扫描
WEB-INF/classes
所有类。对于应用程序的
WEB-INF/lib
目录中的每个jar,如果jar包含“META-INF/faces-config.xml”
文件或与正则表达式“.*\\.faces-config.xml”
匹配的文件(即使是空的),也必须扫描那个罐子里的所有类。
您的JAR文件未放在/WEB-INF/lib
,而是放在类路径中的其他位置。 这与上面概述的第四个要求相冲突。
您的webapp的/WEB-INF/faces-config.xml
和/或您的JAR的/META-INF/faces-config.xml
不兼容JSF /META-INF/faces-config.xml
它不能包含JSF 1.x特定的<faces-config>
声明,但必须包含JSF 2.x特定的声明。
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" 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-facesconfig_2_0.xsd" version="2.0"> </faces-config>
允许JAR /META-INF
那个完全为空。
当您在Glassfish上使用Mojarra 2.1.3时,可能会在您的特定情况下划伤原因1。 我敢打赌它是其他原因。
另请注意,不得声明post-construct方法抛出任何已检查的异常。 来自stderr
消息:
Method 'public void my.app.MyBean.postConstruct() throws java.lang.Exception' marked with the 'javax.annotation.PostConstruct' annotation cannot declare any checked exceptions. This method will be ignored.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.