2010-03-03 28 views
5

Tôi đã tạo một ứng dụng web JSF 2 với các facelet. Các libs cho JSF được lưu trữ tại tomcat/lib, để chia sẻ nó giữa nhiều ứng dụng. Tôi nghĩ có lẽ sẽ tốt hơn nếu lưu trữ các thư viện libs bên trong thư mục WEB-INF/lib của ứng dụng, để ứng dụng độc lập hơn với các cấu hình máy chủ.Tại sao Đậu được quản lý không được tải trong Tomcat?

Bây giờ khi tôi bắt đầu tomcat qua nhật thực, các bean được quản lý được tải và làm việc. Nhưng khi tôi bắt đầu tomcat trực tiếp/độc lập các bean được quản lý không được tải tự động. Tôi đã sử dụng

@ManagedBean 
@SessionScoped/@RequestScoped 

chú thích để khai báo lớp học là hạt được quản lý.

Tại sao điều này? Tôi có thể làm gì để khắc phục sự cố?

Tôi chưa sử dụng bất kỳ tệp faces-config.xml nào.

Xin cảm ơn trước.

chỉnh sửa:

Có lẽ điều này giúp để xem những gì đang diễn ra:

javax.el.PropertyNotFoundException: /Artikel.xhtml @12,108 value="#{artikelBackingBean.nameFilterPattern}": Target Unreachable, identifier 'artikelBackingBean' resolved to null 
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:93) 
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95) 
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1008) 
    at javax.faces.component.UIInput.validate(UIInput.java:934) 
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1189) 
    at javax.faces.component.UIInput.processValidators(UIInput.java:691) 
    at javax.faces.component.UIForm.processValidators(UIForm.java:243) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080) 
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180) 
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Thread.java:619) 
+0

Bạn có xóa các thư viện JSF khỏi 'Tomcat/lib' không? – BalusC

+0

Có, tôi đã xóa chúng. – c0d3x

+0

Không ai ở đây nói tiếng Anh. – Andrew

Trả lời

1

Đây là một dấu hiệu cho thấy webapp đang sử dụng JSF 1.x thay vì JSF 2.x. Trình cấu hình của JSF 1.x không nhận ra @ManagedBean các chú thích sẽ khiến chúng không được tải/khởi chạy tự động mà không cần faces-config.xml.

Tôi sẽ nghi ngờ một số xung đột trong phiên bản của thư viện JSF được sử dụng. Quét toàn bộ đường dẫn lớp cho các tệp JAR JSF và sử dụng một số công cụ zip/rar để xác định tệp MANIFEST.MF được bao gồm cho phiên bản JSF thực tế. Đường dẫn lớp bao gồm Tomcat/lib, JRE/lib/*Webapp/WEB-INF/lib.

0

Tôi chỉ có vấn đề này và tìm thấy những giải pháp là thuộc tính đúng trong tôi maven-chiến-plugin

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>${plugin-war-version}</version> 
      <configuration> 
       <archive> 
        <addMavenDescriptor>false</addMavenDescriptor> 
       </archive> 
       <archiveClasses>true</archiveClasses> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 

Vì vậy, thiết lập này là false (sai) giải quyết vấn đề của tôi.

Tôi viết blog về nó là tốt: http://www.baselogic.com/blog/development/java-javaee-j2ee/propertynotfoundexception-target-unreachable-identifier-patientbean-resolved-to-null

3

JSF tìm đậu trong lớp WEB-INF /, khi bắt đầu với tomcat: chạy các lớp isn't vị trí này.

Sử dụng mvn tomcat: chạy chiến tranh, làm việc cho tôi.

+0

Làm thế nào để bạn biết rằng OP đang sử dụng Maven? Cả câu hỏi hiện tại của OP lẫn bất kỳ câu hỏi nào trước đây của OP đều không cho thấy rằng anh ta đang sử dụng Maven hoặc ít nhất cũng quen thuộc với nó. – BalusC

+0

Một dự án JSF đơn giản chạy với MAven Tomcat 7 plugin bằng cách sử dụng tomcat7: chạy là không phát hiện chú thích @ManagedBean và ném ngoại lệ PropertyNotFound. Nhưng làm việc tốt với mvn: tomcat7: run-war. –

0

Thêm META-INF/context.xml tệp vào thư mục gốc của web và sử dụng run-war. Bạn có thể đặt một thẻ trống rỗng Context bên trong tệp.

Các vấn đề liên quan