2011-02-08 49 views
6

Tôi đang triển khai Portlets trên Liferay 5.2.3 trên Tomcat 6. Tôi nhận được lỗi này chỉ cho một trong các portlet.java.lang.IllegalStateException: Thuộc tính ngữ cảnh gốc không thuộc loại WebApplicationContext

java.lang.IllegalStateException: Root context attribute is not of type WebApplicationContext 

Tôi đã nghiên cứu và phát hiện ra rằng Spring đã khởi tạo bối cảnh ứng dụng chuẩn portlet khi cần một web. Nhưng trong web.xml của tôi tôi chỉ xác định contextLoaderListner

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

Và để đầu nó đi, nếu một khác nhau * file .jar đã được nhìn lên bởi Spring, thì tại sao sẽ portlet khác của tôi được triển khai, ngoại trừ một?

Sau một vài lần triển khai, tôi nhận được điều đó để khắc phục. Ai đó có thể đặt ánh sáng lên không?

Trả lời

0

Có vẻ như bạn không xác định bối cảnhConfigLocation? trong web.xml, bạn cũng nên có thông tin như thế này ngoài contextLoaderListener:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/applicationContext.xml  
    </param-value> 

</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

Trường hợp applicationContext.xml là tệp cấu hình bình thường cho webapp.

Bạn cũng nên có điều này trong web.xml của bạn nếu sử dụng lò xo portlet MVC:

<servlet> 
    <servlet-name>ViewRendererServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.ViewRendererServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>ViewRendererServlet</servlet-name> 
    <url-pattern>/WEB-INF/servlet/view</url-pattern> 
</servlet-mapping> 

Trong portlet.xml của bạn tôi đoán bạn có một cái gì đó như thế này để xác định các portlet của bạn:

<portlet> 
<portlet-name>sample</portlet-name> 
<portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class> 
<supports> 
    <mime-type>text/html</mime-type> 
    <portlet-mode>view</portlet-mode> 
</supports> 
<portlet-info> 
    <title>Sample Portlet</title> 
</portlet-info> 
</portlet> 

Nếu bạn chưa có, hãy xem tài liệu tham khảo portlet mvc mùa xuân documentation

Hy vọng điều đó sẽ hữu ích.

1

Nguyên nhân gốc có vẻ là một biến tĩnh trong máy chủ cổng/ứng dụng "treo lên" một cá thể của một lớp từ portlet. Hai thủ phạm phổ biến là log4j và đăng nhập java, cả hai đều thường được sử dụng bởi containters ứng dụng.

Xem log4j and the thread context classloaderhttp://logback.qos.ch/manual/loggingSeparation.html để thảo luận thêm về nhật ký. Đề xuất là sử dụng SLF4J với logback OR để chắc chắn đặt log4j.jar trong tệp WAR của bạn để nó nằm trong trình nạp lớp bên phải (mặc dù một số thùng chứa sẽ ngăn chặn giải pháp này).

Ngoài ra, một số lớp khác có trong vùng chứa có thể là nguyên nhân. Đăng nhập chỉ là một vấn đề phổ biến.

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