Tôi đã có cùng một triệu chứng với một phương pháp chữa trị khác nhau. Tôi đã cố gắng nâng cấp ứng dụng web JSF 2.2.4 / Spring 3.0 của mình lên JSF 2.3 để tận hưởng các móc nối websocket mới của JSF ở đó và Eclipse (thực ra là STS) sẽ không hợp tác. Trong các khía cạnh dự án của Eclipse, JSF 2.3 không bao giờ có sẵn cho đến khi tôi chỉnh sửa trực tiếp tệp org.eclipse.wst.common.project.facet.core.xml theo hướng dẫn trong các câu trả lời trước - mức cao nhất sẽ là 2.2.
Đây là những cái vòng tôi nhảy qua. Tôi không biết rằng tất cả những thứ này là cần thiết bởi vì về cơ bản tôi không hiểu tất cả cấu hình này.
Trong Eclipse tôi thường xuyên nhận được một cảnh báo đáng sợ, "Sửa đổi một dự án theo khía cạnh khi việc triển khai một hoặc nhiều khía cạnh được cài đặt không có khả năng có thể dẫn đến một dự án bị hỏng. Bạn có chắc chắn muốn tiến hành không?" Điều này thôi thúc tôi thực hiện các cam kết thường xuyên hơn nhưng không có tham nhũng xảy ra.
- Nâng cấp JDK từ 1.7 lên 1.8 trong POM, trình biên dịch Eclipse và các khía cạnh dự án Eclipse.
Cập nhật các phụ thuộc Maven sau:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
... đến:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
... và ...
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.4</version>
</dependency>
... đến:
<dependency>
<groupId>javax.faces</groupId>
<artifactId>javax.faces-api</artifactId>
<version>2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0</version>
</dependency>
Tôi đã phải cập nhật các khai báo không gian tên web.xml của mình từ:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
... đến:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
Tôi đã phải cập nhật các khía cạnh dự án -> Mô-đun web động từ 2.5 lên 3.0. Tôi đã thử 3.1 nhưng gặp lỗi.
Trong quá trình này, tôi thường xuyên gặp lỗi trong tiêu đề của bài đăng này, "Không thể thay đổi phiên bản của mô-đun Dynamic Web Module thành 3.0" và Eclipse đã từ chối biên dịch dự án hoặc cung cấp JSF 2.3 trong các khía cạnh dự án. Khi tôi chỉnh sửa tệp org.eclipse.wst.common.project.facet.core.xml theo hướng dẫn các lỗi đã biến mất, Eclipse đã cung cấp JSF 2.3 trong Project Facets và dự án được biên dịch và chạy tốt trên Tomcat 9.0.8. Tuy nhiên, Project Facets vẫn cảnh báo "Không thể tìm thấy phiên bản 2.3 của khía cạnh dự án jst.jsf. Chức năng sẽ bị hạn chế." Tôi nghi ngờ điều này đơn giản có nghĩa là tự động hoàn thành và các tiện ích Eclipse khác sẽ không khả dụng vì nó không thể tìm thấy triển khai JSF 2.3 được khai báo trong POM của tôi.
Hy vọng điều này sẽ giúp được ai đó. Các tìm kiếm của Google chỉ mang lại bài đăng này của Ali Bassam và gián tiếp BalusC đã giúp.