2011-07-08 4 views
0

J'ai besoin d'implémenter un ice:commandButton qui passe une liste à son bean backing. Je ne suis pas dans une portée de portlet, mais dans une portée d'étiquette.Est-ce que f: attribut supporte autre chose que String?

Je sais que lorsque je récupère un f:attribute de l'actionListener, je reçois un objet qui doit être casté.

Je veux savoir si je peux f: attribut à un List<MyClass>, où l'instance réelle de la liste est en fait un ArrayList et MyClass est sérialisable.

Quelque chose comme:

MyTag.xhtml

<ice:commandButton actionListener="#{TagBean.doPrintItems}"> 
    <f:attribute name="collection" value="#{items}" /> 
</ice:commandButton> 
//[other things] 

MyPortlet.jspx

<my:printPopup items="#{BackingBean.itemsToPrint}" /> 

BackingBean.java

class BackingBean { 
    private List<MyClass> itemsToPrint; 

    //getter and setter of course 
} 

TagBean.java

class TagBean { 
    private List<MyClass> collection; 

    //getter and setter of course 
    public void doPrint(ActionEvent e) { 
     collection = (List<MyClass>) e.getComponent().getAttributes().get("collection"); 
    } 

Pensez-vous que ce soit faisable? Merci

+0

Ça devrait juste marcher. Quel est le problème auquel vous êtes confronté? Ce n'est pas clair d'après la question. – BalusC

+0

Pas encore de problème. J'ai d'autres tâches à accomplir avant d'y aller. ** Si je suis frappé ** avec le bouton et que je trouve que cette façon de faire n'est pas viable, il y a certainement un énorme recul à faire pour moi. Je m'attends à venir dans la chose du bouton lundi prochain –

Répondre

0

Le <f:attribute> vous donne la possibilité d'ajouter des attributs de composant personnalisés. Ils seront stockés dans l'état de l'arborescence des composants côté serveur. Cela peut donc être n'importe quel type d'objet Java que vous voulez. La méthode UIComponent#getAttributes() indique également que moins ou plus; il renvoie un Map<String, Object>, pas un Map<String, String>. Je crois que votre doute est basé sur le fait que les paramètres de requête HTTP ne peuvent être que des chaînes. Mais les attributs de composants ne doivent pas être confondus avec les paramètres de requête HTTP.

+0

Parfait clarification du problème. Donc les attributs ** sont ** stockés côté serveur –

Questions connexes