【发布时间】:2012-01-09 00:50:45
【问题描述】:
我正在尝试在 JSF 中实现这个简单的示例:有一个 user.xhtml 页面可以使用 id 参数(user.xhtml?id=3 / user.xhtml? id=12)。根据 id 页面应该显示具有指定 id 的用户的信息。
@ManagedBean
@RequestScoped
public class OverviewController extends BaseController{
private UserDetails details;
@PostConstruct
@SuppressWarnings("unused")
private void init(){
Integer userId = getIntegerParam(Constants.PARAMETER_USER); //this brings the value of the user parameter as an Integer
if (userId != null){
UserService userService = new UserService();
details = userService .getDetails(userId);
}
}
//GET & SET
}
在 xhtml 文件中,我有以下内容:
<div>
Name: #{overviewController.details.name}
City: #{overviewController.details.city}
</div>
此处引导控件的链接:
<h:link outcome = "user.xhtml" value = "details">
<f:param name = "user" value = "2">
</h:link>
我的印象是,当通过 EL 访问overviewController 时,ManagedBean 将被构造,而在@PostConstruct 中,details 将被初始化。但我没有得到任何结果,甚至没有构建overviewController。 我的问题更进一步,我问如何实现基于多个参数或排序的搜索?
【问题讨论】:
-
OverviewController类是用@ManagedBean(name="overviewController")还是@Named("overviewController")注释的? -
另外,应该还有范围注解,比如
@RequestScoped。 -
也没有必要。如果名称未声明,JSF 将采用类名,将类的第一个字母转换为小写字母并将其作为 bean 的名称。
-
好的,那么
getIntegerParam方法定义在哪里? -
是的。定义了所有需要的方法。此外,我创建了一个 PhaseListener,我看到除了 restore (1) 和 render(6) 之外的任何阶段都没有被调用。也就是说,我相信,因为