2010-10-15 58 views
1

我在我的实体查询类中使用了以下代码,该类用于显示List对象。当我使用@Factory方法名称(“用户”)遍历rich:dataTable中的所有成员时,这些对象会正确显示。但是当我点击特定的用户去详细信息页面时,下面的页面参数(e.g. &dataModelSelection=_user:users[0])会导致页面不显示详细信息,但如果删除此查询参数,它似乎工作正常。这里可能会出现什么问题?无法查看对象的详细信息,如果通过@Factory方法呈现

@Name("userList") 
public class UserList extends EntityQuery<User> { 

    @DataModel(scope = ScopeType.PAGE) 
    private List<User> users; 

    @Factory("users") 
    public List<User> getUsersByOrg() { 

} 

注意:如果我注释掉包含@DataModel注释的行,上面定义的参数没有定义,我能够查看用户详细信息。

回答

1

@DataModel注解允许Seam包装一些java.util。*集合,如List,Set等... JSF UIData组件(例如rich:dataTable)需要一个特殊的集合包装器,它的基类是javax.faces.DataModel它支持用户做出行选择它解释了为什么你看到

dataModelSelection=_user:users[0] 

所以,如果你想捕捉的选择的用户,你应该使用@DataModelSelection

@DataModelSelection 
@Out(required=false) 
private User selectedUser; 

您可以使用H:commandLink到扔支持行动

<rich:datTable value="#{users}" var="_user"> 
    <h:column> 
     <f:facet name="header">Action</f:facet> 
     <h:commandLink action="#{userHome.view}" value="View"/> 
    </h:column> 
</richTable> 
+0

+1,但你并不需要'@ Out' – 2010-10-16 19:32:41

+0

@Shervin你是对的,Shervin。谢谢 – 2010-10-17 02:03:35