在 setter 中添加额外的逻辑?
Adding additional piece of logic into setters?
我有一个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 是一种只执行设置特定对象的方法,而不再是。这就是我问这个问题的原因。
对我来说,可以向 setter 添加额外的代码。例如,如果你知道一个字符串不能为空,你可以这样做:
public void setMe(String me) {
if (me == null) {
this.me = "";
} else {
this.me = me;
}
}
但是在 setter 中添加对数据库的调用是不正确的。这应该在调用 dao 的服务中完成。
我有一个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 是一种只执行设置特定对象的方法,而不再是。这就是我问这个问题的原因。
对我来说,可以向 setter 添加额外的代码。例如,如果你知道一个字符串不能为空,你可以这样做:
public void setMe(String me) {
if (me == null) {
this.me = "";
} else {
this.me = me;
}
}
但是在 setter 中添加对数据库的调用是不正确的。这应该在调用 dao 的服务中完成。