2009-05-07 6 views
0

Une fois que l'utilisateur a renseigné mon bean backing avec des informations via les formulaires, je souhaite traiter l'instance en code Java (par exemple JAXB marshalling).Passage d'une instance de bean de sauvegarde en tant que paramètre pour une autre méthode de bean de sauvegarde

Ainsi, au moment où je le fais comme ceci:

<% OtherBean.method(myBackingBean); %> 

qui est - si je ne me trompe pas - pas tout à fait à la solution de ce jour :) Comment puis-je faire cela se produire dans un 'meilleure façon? Merci d'avance, Daniel.

Répondre

3

Une solution consiste à ajouter une méthode d'action au bean - il est possible de le faire traiter lui-même.

Par exemple, ce haricot simple:

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; 
    } 

} 

... défini dans 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> 

... peuvent être traités en utilisant la présente JSP :

<?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> 

Notez la méthode de liaison # {simpleBean.processData}. Cela doit être une méthode publique qui ne prend aucun argument et renvoie un argument String (qui peut être utilisé pour la navigation dans les pages si vous le souhaitez).

Ce n'est pas la seule façon d'y parvenir, mais c'est assez simple.

+0

Encore merci McDowell! Je n'ai pas pensé à mettre "ça" dans le même grain, mais c'est assez évident. Donc j'appelle simplement la méthode nécessaire dans le 'processData' comme: method (this), et tout fonctionne. –

0

Vous pouvez avoir un bean de support comme variable d'instance de l'autre bean. et configurez-le au printemps ou tout ce que vous utilisez.

Questions connexes