Как Seam Framework обрабатывает составные первичные ключи в pages.xml с помощью EntityHome?
Обычный подход заключается в назначении идентификатора компоненту entityHome, например:
<page view-id="/team-list.xhtml">
<param name="club" value="#{clubHome.id}" converterId="javax.faces.Integer" validatorId="javax.faces.LongRange" />
</page>
Это присваивает (атомарный) идентификатор clubHome с URL
HTTP: // ... клуб = 12345 ...
но что за техника применяется для сущностей, использующих составные первичные ключи? Здесь ключ состоит из (roundId, ordinalNumber), давая URL
HTTP: // ... круглый = 143 & группа = 1 ...
<page view-id="/standings.xhtml">
<param name="group" value="#{groupHome.setId(new GroupId(round???, group???))}" />
</page>
Выше приведена нерабочая попытка назначить новый составной идентификатор для groupHome. Проблема здесь в том, как ссылаться на параметры URL. (Есть ли способ создать временные переменные в pages.xml?)
Кроме этого, я не вижу другого способа, кроме как назначить атомарные свойства PK для переменных-членов в одном или нескольких различных компонентах EntityHome, конечно же, требуя подклассы 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;
}
}
Используется как показано на стр. Xml:
<page view-id="/standings.xhtml">
<param name="round" value="#{roundHome.id}" />
<param name="group" value="#{groupHome.ordinalNumber}" />
</page>
Итак, какова лучшая практика здесь? Я не могу найти ни одного примера с использованием составных первичных ключей ни в «Шов в действии», ни в / в сети.