Dynamische JSF (2.0) Befehlsschaltflächen - set-Aktion mit Argumenten
Ich versuche, die add JSF <h:commandButtons>
dynamisch auf meiner Webseite, und bisher habe ich Sie angezeigt, aber ich kann die Aktion mit Parametern, wie konnte ich in eine statische Seite:
action="#{bean.function(parameter)}"
. (dies ist natürlich mit EL-2.2)
Schaut sich um ich finde, dass ich haben, um eine MethodExpression
, aber das ist unklar für mich und ich habe nicht in der Lage zu finden, viele Informationen auf dieser. Wenn jemand könnte das Licht durch den Nebel und erklären, wie dies gemacht werden kann, es würde sehr geschätzt werden.
EDIT: so, jetzt habe ich diese
public void displayNode( String childName ){
//lots of messy code instantiating JSF components
if( activeEmployee.getParent() != null ){
HtmlCommandButton parent = new HtmlCommandButton();
HtmlOutputText parentLabel = new HtmlOutputText();
parentLabel.setId("label" + count++); //I really hate having to use count
parentLabel.setValue( "Parent: " );
parent.setId("Parent" + count++);
String parentName = activeEmployee.getParent().getName();
parent.setValue( parentName );
MethodExpression expression = createMethodExpression("#{tree.displayNode('" + parentName + "')}",
null, String.class);
parent.setActionExpression( expression );
newDiv.getChildren().add( parentLabel );
newDiv.getChildren().add( parent );
}
- Können Sie nicht verwenden Sie die gerenderten Eigenschaft zum ein - /ausblenden der Befehls-button?
- nee ich bin dynamisch erstellen-Baum-Knoten mit den Tasten auf das display andere Verwandte Knoten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
ExpressionFactory#createMethodExpression()
.Hier ist eine convenience-Methode:
Folgender action-Methode Beispiele:
kann dann wie folgt erstellt werden:
Beachten Sie, dass der EL-Ausdruck ist genau das gleiche wie Sie verwenden würden, in die normale Ansicht Datei.
Update hier ist ein SSCCE, die funktioniert gut für mich mit Mojarra 2.1.12 auf Tomcat-7.0.27.
Unabhängigen zu dem konkreten problem, alle oben ist eine schlechte Praxis. Siehe auch Wie funktioniert das 'binding' - Attribut arbeiten in JSF? Wann und wie sollten Sie eingesetzt werden?
MethodExpression
weil ich habe es getan, bevor Sie mitbutton.setActionExpression(...)
. Was ist der Unterschied zwischen der VerwendungsetActionExpression()
undsetAction()
neben der offensichtlichen Argumente erforderlich?ValueBinding
,MethodBinding
und so weiter (die später vereint mit JSP-EL). Jedoch nicht verwenden, keine deprecated API, JSF 2.x an alle. Sie unterliegen zum entfernen. Siehe auch stackoverflow.com/questions/4812755/... ein wenig Geschichte auf EL.displayNode
ohne Argumente, einfach nichts passiert nach dem Klick auf den button erstelltnewDiv
in der Bohne? Es sollte ein request-scoped bean und es sollte nur eine Eigenschaft mit einem normalen "getter/setter" und nichts mehr (auch kein lazy-loading; JSF wird es von selbst). Alle action-Methoden in Abhängigkeit von den manipulierten Komponente Baum zurückvoid
odernull
(so, dass es der gleichen Ansicht ist beibehalten für spätere Anfrage).tree
Klasse, dann verwenden Sie diese Funktionen zum anzeigen der Knoten.newDiv
ist einfach einHtmlPanelGroup
element, und am Ende der Funktion wird Hinzugefügt, um eineHtmlPanelGroup topDiv
(bald zu ändern, muss eine Tabelle sein), dass ich an einediv
auf der JSF-Seite.UIComponent
ist nicht serialisierbar, so Stand das speichern fehl. Wenn Ihr unbedingt benötigen sehen Gültigkeitsbereich von Daten, sondern teilen Sie dieUIComponent
Eigenschaft (und die Aktionen je nach es) in ein neues request-scoped bean und Injektion der Ansicht scoped bean als managed-Eigenschaft, wenn Sie benötigen einige Daten von ihm.UIComponent
beziehen Sie sich?UIComponent
, so auch dienewDiv
.binding
auf einen Blick scoped bean ist, dass eine Marke neue Instanz erzeugt, auf jede Anfrage. Es ist also ziemlich sinnlos zu machen, eine Ansicht Gültigkeitsbereich ein.