2010-08-30 6 views
10

Ich habe gelesen über die Übergabe von Parametern von JSF-Seite zu ManagedBean durch actionListener. Ist es auch möglich, einen Parameter an eine einfache Aktionsmethode zu übergeben?JSF2 Aktionsparameter

Vielen Dank für das Lesen ...


Danke sowohl für Ihre Ratschläge!

<h:commandLink id="link" action="#{overviewController.showDetails}" > 
    <f:setPropertyActionListener target="#{overviewController.show_id}" value="#{project.id}" /> 
    <h:outputText value="#{project.title}" /> 
</h:commandLink> 

So, jetzt, der den grünen Haken verdient: Ich würde :-)

Folge für mich ohne dich verloren gearbeitet? :-P kann ich zwei von ihnen geben?

Antwort

13

Ja. Entweder:

action="#{bean.method(param)}" 

Oder

<h:commandButton .. > 
    <f:setPropertyActionListener 
     target="#{bean.targetProperty}" value="#{param}" /> 
</h:commandbutton> 

(und verwenden Sie die Bean-Eigenschaft in der Methode)

13

Sie sprechen über Parameter in dieser Form?

<h:commandButton action="#{bean.action(param)}" /> 

Das hängt von der EL-Implementierung ab. Nur JBoss EL und JSP 2.2 EL ist dazu in der Lage. Wie Sie JBoss EL installieren, ist in this answer beschrieben.

Alternativ können Sie auch einfach f:param verwenden. Die f:param funktioniert nur mit h:commandLink, aber seit JSF 2.0 funktioniert es auch auf h:commandButton. Z.B.

<h:commandButton action="#{bean.action}"> 
    <f:param name="foo" value="bar" /> 
</h:commandButton> 

mit einem @ManagedProperty die den Parameter als verwaltete Bean-Eigenschaft setzt:

@ManagedProperty("#{param.foo}") 
private String foo; 

Damit Sie jedoch auf Standardtypen beschränkt (String, Number, Boolean). Eine Alternative ist die f:setPropertyActionListener:

<h:commandButton action="#{bean.action}"> 
    <f:setPropertyActionListener target="#{bean.foo}" value="#{otherBean.complexObject}" /> 
</h:commandButton> 

Das heißt, es mehr Möglichkeiten gibt, wie gut, aber das hängt alles von der Sohlenfunktionsbedarf und die Bohnen Bereiche. Wahrscheinlich müssen Sie überhaupt keinen "Parameter" übergeben.

3

Die neue Spezifikation. JSF2 ermöglicht, dass die Aktionsmethode ein param erhält so Sie in der Lage sein

<h:commandButton action="#{bean.action(otherBean.complexObject)}"> 

am ManagedBean die Methode sein zu tun:

public String action(Object complexObject) 

* Hinweis: Stellen Sie sicher, dass Sie das „el-impl umfassen -2.2.jar "*

+0

Dies ist nicht JSF-spezifisch. Dies ist EL-spezifisch und Teil von Servlet 3.0/JSP 2.2 (Tomcat 7, Glassfish 3, JBoss AS 6, usw.). Wenn Sie also JSF 2.0 auf Servlet 2.5 ausführen, wird es nicht funktionieren. Dies ist unabhängig von der JSF-Version. – BalusC