2009-05-07 7 views
0

Nachdem der Benutzer meine Backing-Bean mit Informationen über die Formulare gefüllt hat, möchte ich die Instanz in Java-Code (z. B. JAXB-Marshalling) verarbeiten.Übergeben einer Backing-Bean-Instanz als Parameter für eine andere Backing-Bean-Methode

Also im Moment ich tue dies in etwa so:

<% OtherBean.method(myBackingBean); %> 

die - wenn ich mich nicht irre - nicht ganz auf dem neuesten Stand Lösung :) Also, wie kann ich dies in einem geschehen 'besserer Weg?

Vielen Dank im Voraus, Daniel.

Antwort

3

Eine Lösung besteht darin, der Bean eine Aktionsmethode hinzuzufügen - es ist möglich, sie selbst verarbeiten zu lassen.

Zum Beispiel diese einfache Bohne:

public class SimpleBean { 

    private String forename; 
    private String surname; 

    public String processData() { 
    // TODO: real work 
    System.out.println("forename=" + forename); 
    System.out.println("surname=" + surname); 
    return null; // optional navigation rule 
    } 

    public String getForename() { 
    return forename; 
    } 

    public void setForename(String forename) { 
    this.forename = forename; 
    } 

    public String getSurname() { 
    return surname; 
    } 

    public void setSurname(String surname) { 
    this.surname = surname; 
    } 

} 

... definiert in WEB-INF/faces-config.xml:

<managed-bean> 
    <managed-bean-name>simpleBean</managed-bean-name> 
    <managed-bean-class>simplebean.SimpleBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

... verarbeitet werden können, die diese JSP mit :

<?xml version="1.0" encoding="UTF-8" ?> 
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core"> 
    <jsp:directive.page language="java" 
    contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" /> 
    <jsp:text> 
    <![CDATA[<?xml version="1.0" encoding="UTF-8" ?>]]> 
    </jsp:text> 
    <jsp:text> 
    <![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">]]> 
    </jsp:text> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Enter Name</title> 
    </head> 
    <body> 
    <f:view> 
    <h:form> 
     <h:panelGrid columns="2"> 
     <h:outputText value="forename:" /> 
     <h:inputText id="it1" value="#{simpleBean.forename}" /> 
     <h:outputText value="surname:" /> 
     <h:inputText id="it2" value="#{simpleBean.surname}" /> 
     </h:panelGrid> 
     <h:commandButton action="#{simpleBean.processData}" 
     value="process" /> 
    </h:form> 
    </f:view> 
    </body> 
    </html> 
</jsp:root> 

Beachten Sie die Methodenbindung # {simpleBean.processData}. Dies muss eine öffentliche Methode sein, die keine Argumente annimmt und ein String-Argument zurückgibt (das bei Bedarf für die Seitennavigation verwendet werden kann).

Dies ist nicht der einzige Weg, um dies zu tun, aber es ist ziemlich einfach.

+0

Vielen Dank nochmal McDowell! Ich habe nicht darüber nachgedacht, "diese" Logik in dieselbe Bohne zu schreiben, aber es ist ziemlich offensichtlich. Also rufe ich nur die benötigte Methode in der 'processData' wie: Methode (this), und alles funktioniert. –

0

Sie könnten eine Backing-Bean als Instanzvariable der anderen Bean haben. und konfigurieren Sie es im Frühjahr oder was auch immer Sie verwenden.

Verwandte Themen