0

(这似乎与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()控制台确实显示来自该方法 的 sysout ,但不显示来自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 的 jar MW_HOME/common/deployable-libs/jsf-1.2.war!/WEB-INF/lib)、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,同样的症状。

如有必要,我可能会发布其他文件。

4

2 回答 2

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 。它存在两个 JAR 文件

jsf-api.jar
jsf-impl.jar

您只需要确保您faces-config.xml的声明符合 JSF 1.2 规范,并且声明至少web.xml符合Servlet 2.5 规范。

最后,JSTL 库应该是这个

于 2011-05-12T13:31:30.813 回答
0

再次回答我自己的问题......似乎,虽然您可以将 Weblogic 的 JSF 库嵌入到您自己的应用程序中(这对我们公司来说是可取的,因为我们开发的产品应该对几个客户的安装影响很小),依赖注入和发布-construct 机制仅在您实际部署库并引用它时才起作用。

这个网站帮助了我:http ://blog.eisele.net/2009/02/jsf-versions-and-weblogic-server.html

简而言之,我必须将 Weblogic 的 JSF 战争部署为一个库,从我自己的应用程序中删除它的 jars(也已删除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不止一次使用的 bean。这适用于 Websphere、Jetty 和 Tomcat,但 Weblogic 明确禁止多次使用它:

http://download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/annotate_dependency.html

于 2011-05-13T12:54:14.810 回答