【发布时间】:2010-10-26 12:59:51
【问题描述】:
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>
这会将(原子)ID 从 URL 分配给 clubHome
但是使用复合主键应用实体的技术是什么?这里的key由(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 组件中的成员变量,当然需要具有相应 getter 和 setter 的 EntityHome 子类:
@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”和网上/网上都找不到任何使用复合主键的例子。
【问题讨论】: