我仍然对PAGE
和CONVERSATION
(临时)范围感到困惑。也许我在这里得到一些帮助。
据我所知,只要用户只回发同一页面,就会有PAGE
范围内的变量存在。临时CONVERSATION
范围甚至可以在重定向到下一页后继续存在。
这是一个让我感到困惑的两个效果的例子:
首先,组件和出口位于CONVERSATION
范围内,tempUser
数据显示在jsf页面中。但是在从jsf-page调用的save方法中,注入的tempUser
为null。为什么呢?
其次,如果我做同样的事情,但是将组件和@ In / @ Outs范围更改为PAGE
范围,tempUser
会在回发时正确注入 - 但由于观察性原因而未被保存,尽管甚至调用super.update()
上的userHome
- 方法也会被调用。或者在使用homeEntities方面存在问题(iwa仅将它们用作DAO包装器的想法)?
@Name("userAction")
@Scope(ScopeType.CONVERSATION)
public class UserAction implements Serializable {
private static final long serialVersionUID = -4852371546895918692L;
@In(create = true)
private UserHome userHome;
@Out(scope = ScopeType.CONVERSATION)
@In(required = false,scope = ScopeType.CONVERSATION)
User tempUser;
@RequestParameter
private Long userId;
@Factory("tempUser")
public User getUser() {
if (tempUser == null) {
userHome.setUserId(userId);
tempUser = userHome.getInstance();
userHome.clearInstance();
}
return tempUser;
}
public void save() {
userHome.setInstance(tempUser);
userHome.update();
}
}
xhtml包含一个带有
的表单<a:commandButton
id="update"
styleClass="button admin"
action="#{userAction.save}"
value="#{messages['user.action.update']}"/>
感谢您的回复。对不起,如果这是两个问题。