2009-05-07 15 views
0

ユーザーがフォームを介してバッキングBeanに情報を埋め込んだ後、Javaコードでインスタンスを処理したい(JAXBマーシャリングなど)。私はそうのようにこれをやっている現時点ではそうバッキングBeanインスタンスを別のバッキングBeanメソッドのパラメータとして渡す

: - 私が正しい場合 -

<% OtherBean.method(myBackingBean); %> 

あるではない、非常に最新のソリューション:)それでは、どのように私はでこれを実現することができます'もっといい方法?事前に

おかげで、 ダニエル。

答えて

3

解決方法の1つは、Beanにアクションメソッドを追加することです。それは、自身を処理することが可能です。例えば、この単純なビーン

を:

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

} 

... WEB-INFに定義されている/面する-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> 

...この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> 

#{simpleBean.processData}をバインドするメソッドに注意してください。これは、引数を取らずにString引数を返すパブリックメソッドでなければなりません(必要に応じてページナビゲーションに使用できます)。

これはこれを実行する唯一の方法ではありませんが、それはかなり簡単です。

+0

もう一度ありがとう、マクダウェル!同じbeanにロジックを入れることは考えていませんでしたが、それはかなり明らかです。ですから、私は 'processData'の中で必要なメソッドを呼び出すだけです:メソッド(this)とすべての作業。 –

0

他のBeanのインスタンス変数として1つのバッキングBeanを持つことができます。それを春に、またはあなたが使っているもので構成してください。

関連する問題