迁移至Jakarta EE后,Eclipse中Facelets的EL表达式Ctrl+Click功能失效
问题:Jakarta EE 10迁移后Eclipse中XHTML无法跳转Java类/代码提示失效
近期将项目从javax迁移至Jakarta EE v10、JDK从11升级到17,同时更换为Tomcat 10.1和PrimeFaces v13。此前在Eclipse中打开.xhtml文件时,按住Ctrl点击Java类或方法可跳转至对应文件/方法,迁移后该功能及.xhtml文件中Java类/方法的代码提示均失效。
相关代码
Java类定义
import jakarta.inject.Named; import org.springframework.web.context.annotation.SessionScope; @Named(LoginWorkBean.NAME) @SessionScope public class LoginWorkBean { private static final long serialVersionUID = 2383439018xL; public static final String NAME = "loginWorkBean"; public String userName; //and getters and setters }
XHTML文件示例
此前按住Ctrl点击loginWorkBean可跳转至上述类,迁移后该功能失效且无报错。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:o="http://omnifaces.org/ui" xmlns:p="http://primefaces.org/ui" xmlns:f="http://java.sun.com/jsf/core"> <ui:composition> <h:outputText value="#{loginWorkBean.userName}" styleClass="bold" escape="false" /> </ui:composition> </html>
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_4_0.xsd" version="4.0"> </faces-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="5.0"> <context-param> <param-name>jakarta.faces.CONFIG_FILES</param-name> <param-value>/WEB-INF/faces-config.xml</param-value> </context-param> <context-param> <param-name>jakarta.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>jakarta.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> <context-param> <param-name>primefaces.THEME</param-name> <param-value>saga</param-value> </context-param> <context-param> <param-name>org.apache.myfaces.AUTOMATIC_EXTENSIONLESS_MAPPING</param-name> <param-value>true</param-value> </context-param> </web-app>
已尝试但无效的方法
- 添加JBoss依赖
- 将
@SessionScope注解改为@SessionScoped并添加@ManagedBean - 在Eclipse中添加Spring Tools Suite依赖
- 下载最新版Eclipse企业级Java与Web开发者IDE
- 从Jakarta EE starter下载全新项目并导入
- 下载MyEclipse并导入项目
- 修改xhtml标签为:
xmlns="http://www.w3.org/1999/xhtml" xmlns:f="jakarta.faces.core" xmlns:jsf="jakarta.faces" xmlns:h="jakarta.faces.html"
- 下载IntelliJ IDE并导入项目(代码提示偶尔可用)
有效的方法
- 在NetBeans IDE中功能正常,可Ctrl点击跳转及代码提示,但习惯使用Eclipse,希望解决该问题
- 偶尔使用cmd+.可触发代码提示,但并非准确的变量名
如需更多信息请告知,谢谢!
内容的提问来源于stack exchange,提问作者Himanshu Joshi
相关产品推荐
相关产品推荐

