【发布时间】:2015-04-14 10:22:28
【问题描述】:
我对jsf的看法如下:
<h:selectOneMenu value="#{myBean.selectedRoleId}">
<f:selectItems value="#{myBean.roles}" />
<a4j:ajax event="change" listener="#{myBean.roleChanged}"
render="roleFeatures" />
</h:selectOneMenu>
还有 bean 本身:
public class MyBean{
private Role selectedRole;
private Integer selectedRoleId;
private List<SelectItem> rolesSelectItems;
private RoleService roleService;
//GET,SET
public List<SelectItem> getRoles() {
initRoles();
return rolesSelectItems;
}
private void initRoles() {
roles = new HashMap<Integer, Role>();
rolesSelectItems = new LinkedList<SelectItem>();
//Do some DB operations
}
public void setSelectedRoleId(Integer selectedRoleId) {
selectedRole = roleService.getBy(selectedRoleId); //Here we are getting
//actual role by its Id from database
this.selectedRoleId = selectedRoleId;
}
}
在 setter 中执行额外的逻辑是否被认为可以?在我的特殊情况下,当用户使用selectOneMenu 选择另一个Role 时,我从数据库中得到了实际的Role-entity。对我来说,setter 是一种只执行设置特定对象的方法,不再执行。这就是我问这个问题的原因。
【问题讨论】:
-
@Tiny 我在某处听说
@PostConstruct不是一个很好的注释。我们应该避免使用它吗? -
@Tiny BTW,据我所知,注释仅在 JSF 2.0 之后才可用。但是我们还有一些关于 JSF 1.2 的项目。
-
如果Role是JPA实体对象,最好使用@Postload
-
@user3694267 是的。但是我们使用的是 Hibernate 3.5,据我所知,该版本中没有注释....
标签: jsf setter business-logic