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、RichFaces3.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

@PostConstructJSF 1.2 以降でのみ動作します。JSF 1.2はここからダウンロードできます。2つのJARファイルが存在します

jsf-api.jar
jsf-impl.jar

faces-config.xmlJSF 1.2 仕様に準拠していると宣言されていること、および少なくともServlet 2.5 仕様にweb.xml準拠していると宣言されていることを確認する必要があるだけです。

最後に、JSTL ライブラリはthis oneである必要があります。

于 2011-05-12T13:31:30.813 に答える
0

もう一度自分の質問に答える... Weblogic の JSF ライブラリを自分のアプリに埋め込むことはできますが (これは、複数の顧客へのインストールの影響がほとんどない製品を開発しているため、これは当社にとって望ましいことです)、依存関係の注入とポスト-construct メカニズムは、ライブラリを実際にデプロイして参照する場合にのみ機能します。

このサイトは私を助けてくれました: http://blog.eisele.net/2009/02/jsf-versions-and-weblogic-server.html

簡単に言えば、Weblogic の JSF war をライブラリとしてデプロイし、その jar を自分のアプリから削除し (これも を削除しましたannotations-api)、以下を my に追加する必要がありました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 に答える