(这似乎是https://stackoverflow.com/questions/5862085/weblogic10-3-ignores-postconsturt-method的副本,但这里没有细节,也没有回答。)
我有一个像这样的ManagedBean:
public class TestBean {
private String greeting = "Hello, World!";
public TestBean() {
}
public String getGreeting() {
System.out.println( "getGreeting called, returning " + this.greeting );
return greeting;
}
public void setGreeting( String message ) {
this.greeting = message;
}
@PostConstruct
public void prepareSomething() {
System.out.println( "\n\nPostConstruct called.\n\n" );
this.greeting += " (PostConstruct was called)";
}
}
在我的xhtml中,我只是Bean Message: #{TestBean.greeting}
。但是,在访问页面时,不会调用该方法,而我得到的是
Bean Message: Hello, World!
而不是预期的
Bean Message: Hello, World! (PostConstruct was called)
控制台确实使用getGreeting()
方法显示系统输出,但不显示prepareSomething()
:
INFO: Added Library from: zip:/data/java/wl1034/user_projects/domains/wlrep1034/autodeploy/PCTest.ear/PCTest.war/WEB-INF/lib/jsf-facelets.jar!/META-INF/jstl-fn.taglib.xml
getGreeting called, returning Hello, World!
2011-05-12 10:36:11,720 DEBUG org.richfaces.skin.SkinFactoryImpl - Create new Skin instance for name DEFAULT
更多信息:我正在使用JSF 1.2(使用来自Weblogic 10.3.4的MW_HOME/common/deployable-libs/jsf-1.2.war!/WEB-INF/lib
的jar),Facelets 1.1.14,RichFaces 3.3.2。我在WEB-INF/lib
上有以下罐子:
commons-beanutils-1.7.0.jar
commons-digester-1.8.jar
commons-logging-1.1.1.jar
glassfish.jsf_1.0.0.0_1-2-15.jar
glassfish.jstl_1.2.0.1.jar
javax.jsf_1.1.0.0_1-2.jar
jsf-facelets.jar
log4j-1.2.16.jar
richfaces-api-3.3.2.SR1.jar
richfaces-impl-3.3.2.SR1.jar
richfaces-ui-3.3.2.SR1.jar
SimpleJSF.jar
wls.jsf.di.jar
我也试过放置/删除annotations-api.jar
,同样的症状。
如有必要,我可以发布其他文件。
答案 0 :(得分:1)
我不使用Weblogic,但如果我没有错,Weblogic已经附带了自己的JSTL / JSF库。所以你根本不需要自己提供它们。
但是如果我错了并且Weblogic没有附带它们,那么这些库看起来不太合适。究竟有哪些版本?
glassfish.jsf_1.0.0.0_1-2-15.jar
glassfish.jstl_1.2.0.1.jar
javax.jsf_1.1.0.0_1-2.jar
@PostConstruct
适用于JSF 1.2或更新版本。您可以下载JSF 1.2 here。它存在两个JAR文件
jsf-api.jar
jsf-impl.jar
您只需要确保faces-config.xml
声明符合JSF 1.2规范,并且web.xml
声明符合至少 Servlet 2.5规范。
最后,JSTL库应为this one。
答案 1 :(得分:0)
再次回答我自己的问题......虽然你可以将Weblogic的JSF库嵌入到你自己的应用程序中(这对我们公司来说是可取的,因为我们开发的产品对几个客户的安装影响很小),依赖性注入和后构造机制仅在您实际部署库并引用它时才有效。
这个网站帮助了我:http://blog.eisele.net/2009/02/jsf-versions-and-weblogic-server.html
简而言之,我不得不将Weblogic的JSF战争部署为库,从我自己的应用程序中删除它的jar(也删除了annotations-api
),并将以下内容添加到我的WEB-INF/weblogic.xml
:
<library-ref>
<library-name>jsf</library-name>
<specification-version>1.2</specification-version>
<implementation-version>1.2</implementation-version>
<exact-match>false</exact-match>
</library-ref>
我还不得不重写一次使用@PostConstruct
不止一次的豆子。这适用于Websphere,Jetty和Tomcat,但Weblogic明确禁止使用它一次:
http://download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/annotate_dependency.html