2010-10-26 71 views
1

Seam Framework如何使用EntityHome处理pages.xml中的复合主键?Seam Framework如何使用EntityHome处理pages.xml中的复合主键?

通常的方法是向一个ID分配给entityHome组件,如:

<page view-id="/team-list.xhtml"> 
    <param name="club" value="#{clubHome.id}" converterId="javax.faces.Integer" validatorId="javax.faces.LongRange" /> 
</page> 

这从URL

http://...?club=12345分配(原子)ID来clubHome ...

但申请使用复合主键的实体的技术是什么?这里的关键是由(roundId,ordinalNumber),给人一种URL

http://...?round=143&group=1 ......

<page view-id="/standings.xhtml"> 
    <param name="group" value="#{groupHome.setId(new GroupId(round???, group???))}" /> 
</page> 

上面是一个新的复合ID分配给groupHome非工作的尝试。这里的问题是如何引用URL参数。 (有没有办法在pages.xml中创建临时变量?)

除此之外,我没有其他办法,只能将原子PK属性分配给一个或多个不同EntityHome组件中的成员变量,当然需要EntityHome与resprective getter和setter子类:

@Name("groupHome") 
public class GroupHome extends EntityHome<Group> 
{ 
    // temp var 
    private Integer ordinalNumber; 

    public void setOrdinalNumber(Integer ordinalNumber) 
    { 
     this.ordinalNumber = ordinalNumber; 
    } 

    public Integer getOrdinalNumber() 
    { 
     return ordinalNumber; 
    } 

} 

用作从pages.xml的以下内容:

<page view-id="/standings.xhtml"> 
    <param name="round" value="#{roundHome.id}" /> 
    <param name="group" value="#{groupHome.ordinalNumber}" /> 
</page> 

所以,这里有什么最好的做法是什么?我无法在“Seam in Action”中找到任何使用复合主键的例子,也不能在网上找到任何例子。

回答

2

您可以使用以下

标记您的GroupId为@Scope(ScopeType.EVENT)

@Name("groupId") 
@Scope(ScopeType.EVENT) 
@AutoCreate 
public class GroupId implements Serializable { 

    private Integer id; 
    private Integer ordinalNumber; 

} 

设置你的页面

<page view-id="/standings.xhtml"> 
    <param name="round" value="#{groupId.id}" /> 
    <param name="group" value="#{groupId.ordinalNumber}"/> 
    <action execute="#{groupHome.setId(groupId)}"/> 
</page> 
+0

你去哪儿了? :)(+1) – 2010-10-26 16:54:39

+0

@Kawu当你有一个复合主键时,喜欢使用除** id **之外的其他名字 – 2010-10-26 16:55:02

+0

@Pascal Thivent没有空闲时间。我正在研究一个耗费我时间的法人项目。它是开源的。我会在发布时通知你。不管怎样,谢谢你。 – 2010-10-26 16:59:15