You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java1.6 JSF/PrimeFaces调用Bean方法出现视图层Target Unreachable错误求助

问题原因

你的代码存在两处语法错误,导致托管Bean未被JSF容器正确注册、无法实例化,所以前端页面无法找到对应Bean实例抛出目标不可达错误:

  • @ManagedBean注解的name属性值未加双引号,属于语法错误,无法正确指定托管Bean的名称
  • 代码中使用了Random类但未导入对应包,会导致类编译失败
  • 你在XHTML中使用的托管Bean名称是小写bean,但注解里写的name=Bean即便加了引号也和前端引用名称不匹配

修复方案

直接修改Bean.java的代码即可:

  1. 新增Random类的导入语句
  2. 修正@ManagedBean注解:可以直接省略name属性,JSF默认会将类名首字母小写作为托管名,刚好和你XHTML中引用的#{bean.xxx}匹配

修改后完整的Bean.java代码

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.faces.bean.ManagedBean;

@ManagedBean
public class Bean {
    private String word;
 
    private String anagram;
 
    public void generateAnagram() {
        Random rand = new Random();
 
        List<Character> characters = new ArrayList<Character>();
        for (char c : word.toCharArray()) {
            characters.add(c);
        }
        StringBuilder output = new StringBuilder(word.length());
        while (characters.size() != 0) {
            int randPicker = (int) (Math.random() * characters.size());
            output.append(characters.remove(randPicker));
        }
        this.anagram = output.toString();
    }
 
    public String getAnagram() {
        return anagram;
    }
 
    public void setAnagram(String anagram) {
        this.anagram = anagram;
    }
 
    public String getWord() {
        return word;
    }
 
    public void setWord(String word) {
        this.word = word;
    }
}

可选补充说明

如果你使用的是JSF 2.3及以上版本,javax.faces.bean.ManagedBean已经被废弃,建议替换为CDI的@Named注解,导入包改为import javax.inject.Named;,同时可根据需要添加作用域注解比如@RequestScoped(导入包javax.enterprise.context.RequestScoped)即可正常使用。

内容的提问来源于stack exchange,提问作者spw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:54:02