2010-10-26 3 views
1

Comment Seam Framework gère-t-il les clés primaires composites dans pages.xml en utilisant EntityHome?Comment Seam Framework gère-t-il les clés primaires composites dans pages.xml en utilisant EntityHome?

L'approche habituelle est d'attribuer une carte d'identité aux composants entityHome, comme:

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

Cela affecte le (atomique) ID à clubHome de l'URL

http://...?club=12345 ...

mais Quelle est la technique à appliquer pour les entités utilisant des clés primaires composites? Ici, la clé est composée de (roundId, ordinalNumber), donnant une URL

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

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

Ce qui précède est une tentative non-travail pour affecter un nouvel ID composite à groupHome. Le problème ici est de savoir comment référencer les paramètres d'URL. (Existe-t-il un moyen de créer des vars temp dans pages.xml?)

A part cela, je ne vois pas d'autre moyen que d'assigner les propriétés PK atomiques aux variables membres dans un ou plusieurs composants EntityHome différents, nécessitant bien sûr EntityHome sous-classes avec resprective accesseurs:

@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; 
    } 

} 

Utilisé comme suit à partir pages.xml:

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

Alors, quelle est la meilleure pratique ici? Je ne trouve aucun exemple utilisant des clés primaires composites dans "Seam in Action" ni dans/sur le net.

Répondre

2

Vous pouvez utiliser les éléments suivants

Mark votre GroupId comme @Scope (ScopeType.EVENT)

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

    private Integer id; 
    private Integer ordinalNumber; 

} 

Configurer votre page

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

Où avez-vous été? :) (+1) –

+0

@Kawu Vous préférez utiliser un autre nom que ** id ** lorsque vous avez une clé primaire composite –

+0

@Pascal Thivent Pas de temps libre. Je travaille sur un projet corporatif qui consomme mon temps. C'est open source. Je vous notifierai quand publié. Merci quand même. –

Questions connexes