ebi*_*ini 6 jsf postconstruct managed-bean
我正在运行以下问题.
我有一些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
提前致谢.
Bal*_*usC 15
然后@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扫描注释类的要求
如果文件中的
<faces-config>元素WEB-INF/faces-config.xml包含metadata-complete其值为的属性“true”,则实现不得对除实现本身提供的那些类之外的任何类执行注释扫描.否则,继续如下.如果运行时发现应用程序配置资源中的条目与注释之间存在冲突,则应用程序配置资源中的条目优先.
WEB-INF/classes必须扫描所有课程.对于应用程序
WEB-INF/lib目录中的每个jar ,如果jar包含“META-INF/faces-config.xml”与正则表达式匹配的文件或文件“.*\.faces-config.xml”(即使是空的),则必须扫描该jar中的所有类.
您的JAR文件未被删除/WEB-INF/lib,但在类路径中的其他位置.这与上面概述的第四个要求相冲突.
您的webapp /WEB-INF/faces-config.xml和/或您的JAR /META-INF/faces-config.xml不兼容JSF 2.x. 它不能包含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>
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13915 次 |
| 最近记录: |