Seam Framework如何使用EntityHome在pages.xml中处理复合主键?
通常的方法是为entityHome组件分配ID,例如:
<page view-id="/team-list.xhtml">
<param name="club" value="#{clubHome.id}" converterId="javax.faces.Integer" validatorId="javax.faces.LongRange" />
</page>
这会从URL
将(原子)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>
以上是为groupHome分配新的复合ID的非工作尝试。这里的问题是如何引用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”中找到使用复合主键的示例,也无法在网络中找到任何示例。
答案 0 :(得分: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>