Seam框架如何使用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。
http://...?club=12345...
但是,应用于使用复合主键的实体的技术是什么呢?这里的键由(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子类使用建议的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“和网络上都找不到使用复合主键的例子。
发布于 2010-10-27 00:50:46
您可以使用以下内容
将作用域标记为@ GroupId (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>https://stackoverflow.com/questions/4023886
复制相似问题