Seam - 了解PAGE范围和CONVERSATION范围

时间:2012-06-05 11:00:28

标签: scope seam2 conversation-scope

我仍然对PAGECONVERSATION(临时)范围感到困惑。也许我在这里得到一些帮助。 据我所知,只要用户只回发同一页面,就会有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']}"/>

感谢您的回复。对不起,如果这是两个问题。

0 个答案:

没有答案