【问题标题】:Tomcat 7, JSF 2.0 and @PostConstructTomcat 7、JSF 2.0 和 @PostConstruct
【发布时间】:2011-07-14 04:56:42
【问题描述】:

我不知道我做错了什么,请帮助:

  1. /lib 文件夹中没有额外 jar 的全新 Tomcat 7
  2. 在 WEB-INF/lib(jsf-api.jar、jsf-impl.jar)中带有 mojarra 2.0.3 库的简单网络应用
  3. 除了我的 bean 中的 @PostConstruct 外,其他都可以正常工作 - 它们根本没有被调用

日志:

Mar 12, 2011 11:19:54 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive test_web_app.war
Mar 12, 2011 11:19:54 PM com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra 2.0.3 (FCS b03) for context '/test_web_app'
Mar 12, 2011 11:19:54 PM com.sun.faces.spi.InjectionProviderFactory createInstance
INFO: JSF1048: PostConstruct/PreDestroy annotations present.  ManagedBeans methods marked with these annotations will have said annotations processed.

web.xml

<web-app 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-app_3_0.xsd"
           version="3.0">

  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>

</web-app>

faces-config.xml

<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>

方法不可达的Bean:

@ManagedBean
@ApplicationScoped
public class AppBean {

  @PostConstruct
  public void test() {
    throw new RuntimeException("test");
  }
}

就是这样。有什么想法吗?

【问题讨论】:

  • 整个堆栈跟踪会有所帮助。通过一些快速的谷歌搜索,我怀疑这不是问题。
  • @Brian Roach,实际上整个堆栈是 'Mar 12, 2011 11:19:54 PM com.sun.faces.config.ConfigureListener contextInitialized INFO: Initializing Mojarra 2.0.3 (FCS b03) for context '/test_web_app' ' 在我提到的那一行之前

标签: java jsf tomcat jsf-2


【解决方案1】:

如果您的应用程序范围的托管 bean 没有在任何页面上使用,您必须使用注释

@ManagedBean(eager=true)

为了让它在启动时初始化。

【讨论】:

    【解决方案2】:

    @PostConstruct 如果加载了beans应该可以工作,你可以在直接调用或使用eager=true时加载它,或者在构造函数中进行初始化。

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      相关资源
      最近更新 更多