2010-01-17 19 views
14

Ich suche nach einem f: param-Tag mit einem Objekt meiner Wahl im value-Attribut. Dann möchte ich in der Backing-Bean-Methode für die Aktion dieses Objekt aus der Anfrage ziehen können. (Entschuldigung, wenn meine Terminologie nicht so gut ist, ich bin neu in JSF).Kann ich ein Objekt mit einem JSF-Param-Tag "übergeben"?

Jetzt kann ich Strings in Request-Parameter gut umgehen. Ich merke auch, dass ein Parameter wird immer eine Zeichenfolge in der HTTP-Get oder Post, also bin ich nicht wirklich Übergabe eines Java-Objekts. Ich erkenne auch, dass ein Weg, dies zu tun wäre, eine "ID" irgendeiner Art zu übergeben, die die Backbohne dann verwenden könnte, um das fragliche Objekt zu identifizieren.

Ich frage mich jedoch, ob JSF mir erlauben wird, dies transparent zu machen. Kann ich irgendein Objekt als Wert des Parameters angeben und dann einfach von der RequestMap in einer Aktionsmethode abrufen?

Antwort

20

Sie können das nicht mit <f:param> tun. Es muss an die URL der Anfrage angehängt werden, also muss es wirklich eine String sein. Verwenden Sie stattdessen <f:setPropertyActionListener>.

z.

<h:commandLink value="Submit" action="#{bean.submit}"> 
    <f:setPropertyActionListener target="#{bean.otherBean}" value="#{otherBean}" /> 
</h:commandLink> 

Auf diese Weise der #{otherBean} ist nur als this.otherBean innerhalb submit() Methode. Auf diese Weise müssen Sie sich auch nicht mit der Anforderungs-Parameterzuordnung herumschlagen (für die ich im Fall von <f:param> lieber verwaltete Eigenschaft Injektion mit #{param.name} stattdessen verwendet hätte).

Alternativen verwenden <h:inputHidden> in Kombination mit einem Converter oder mit Tomahawk <t:saveState>. Siehe auch this blog article für weitere Hintergrundinformationen und Beispiele.

+0

Nun, ich werde verdammt sein, das ist genau das, was ich gesucht habe. Vielen Dank! –

Verwandte Themen