JSF 2.2使用@Named注解遇'Target Unreachable'错误求助
解决'Target Unreachable'错误的排查步骤
1. 核对@Named注解与EL引用
- 确保
ProfessorController类的@Named注解与页面EL表达式匹配:如果用默认名称,类名ProfessorController对应的EL是#{professorController};如果自定义了名称(如@Named("profCtrl")),则必须用#{profCtrl}。 - 必须添加CDI作用域注解,比如
@RequestScoped、@ViewScoped(Payara6中需导入jakarta.faces.view.ViewScoped)。无作用域的类CDI不会创建实例,直接导致EL找不到目标。
2. 验证beans.xml配置
- 确保
beans.xml放在WEB-INF目录下,配置正确:
<?xml version="1.0" encoding="UTF-8"?> <beans 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/beans_3_0.xsd" version="3.0" bean-discovery-mode="annotated"> </beans>
bean-discovery-mode设为annotated会自动扫描带CDI注解的类,若设为none会直接导致bean无法被发现。
3. 清理face-config.xml的旧配置
- 删除face-config.xml中原有的
managed-bean配置(比如之前用@ManagedBean时的配置),避免与CDI的@Named冲突。需删除的配置示例:
<managed-bean> <managed-bean-name>professorController</managed-bean-name> <managed-bean-class>com.yourpackage.ProfessorController</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
4. 检查页面按钮的EL表达式
- 确认按钮的
action/actionListener引用无拼写错误,比如打开表单的按钮示例:
<h:commandButton value="添加教授" action="#{professorController.showAddForm}" />
若直接导航页面,可写为action="add-professor.xhtml";若调用控制器方法,需确保方法存在且返回合法的导航字符串或void。
5. 检查类路径与依赖
ProfessorController必须放在带包名的目录下(如com.yourproject.controller),不能使用默认包,否则类加载器无法扫描到。- 项目依赖使用
provided范围,避免与Payara自带的Jakarta EE API冲突,Maven依赖示例:
<dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>9.1.0</version> <scope>provided</scope> </dependency>
6. 清理缓存并重启服务
- 删除Payara缓存目录:
payara6/glassfish/domains/domain1/generated和payara6/glassfish/domains/domain1/cache。 - 清理项目编译目录(如Maven的
target),重新编译部署。
内容的提问来源于stack exchange,提问作者Rashid Ashfaq
相关产品推荐
相关产品推荐

