Java1.6 JSF/PrimeFaces调用Bean方法出现视图层Target Unreachable错误求助
问题原因
你的代码存在两处语法错误,导致托管Bean未被JSF容器正确注册、无法实例化,所以前端页面无法找到对应Bean实例抛出目标不可达错误:
@ManagedBean注解的name属性值未加双引号,属于语法错误,无法正确指定托管Bean的名称- 代码中使用了
Random类但未导入对应包,会导致类编译失败 - 你在XHTML中使用的托管Bean名称是小写
bean,但注解里写的name=Bean即便加了引号也和前端引用名称不匹配
修复方案
直接修改Bean.java的代码即可:
- 新增
Random类的导入语句 - 修正
@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
相关产品推荐
相关产品推荐

