2016-05-14 14 views
0

In einer JSF-Seite verwende ich UI: Include.
index.xhtml:Jsf übergeben Bean als Parameter zu enthalten xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
    <title>test</title> 
</h:head> 
<h:body> 
    <ui:include src="included.xhtml" > 
    <ui:param name="myBean" value="beanA" /> 
    </ui:include> 
</h:body> 
</html> 

und ich möchte ein Bean Namen übergeben, damit die eingeschlossenen Inhalt eine Methode auf dem Bohnen
included.xhtml anrufen:

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    This is from included file.<br/> 
    #{myBean[greeting]} 
</ui:composition> 

die Bean ist so einfach wie möglich
BeanA.java:

package com.test; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 

@ManagedBean 
public class BeanA implements Serializable{ 
    public String getGreeting(){ 
    return "hello from BeanA"; 
    } 
} 

bei einer früheren Antwort auf Stackoverflow suchen: JSF 2: how to pass an action including an argument to be invoked to a Facelets sub view (using ui:include and ui:param)? Ich habe erwartet, dies funktioniert, aber es funktioniert nicht. Der Text "Dies ist aus eingeschlossener Datei" wird gedruckt, aber nicht die BeanA-Eigenschaft. Kann mir jemand sagen warum?

Schließlich möchte ich zu der eingeschlossenen Datei sowohl einen Bean-Namen als auch den Methodennamen übergeben, den ich aufrufen möchte. Im Moment kann ich dieses einfachere Beispiel nicht einmal dazu bringen, mich so zu verhalten, wie ich es erwarten würde.

Mojarra 2.2.0 Apache Tomcat/7.0.55

+1

Warum glaubst du '' Seele d arbeiten, während der Link, auf den Sie verweisen, explizit EL im param-Wert ('# {beanA'}) verwendet? Und bist du sicher, dass nirgendwo Fehler sind? (z. B. wenn Sie irgendwo eine h: -Nachricht einfügen oder die App im Entwicklungsmodus ausführen)? – Kukeltje

+0

Kukeltje: Ich habe versucht , und das hat nicht funktioniert. gibt keine Ausgabe. Es wird auch keine Fehlerausgabe an das Tomcat-Fehlerprotokoll ausgegeben. – rgh

+0

Wo haben Sie die Variable '# {gruß}' definiert? Wenn Sie keinen solchen haben und es sich nur um den Namen der Eigenschaft handelt, sollten Sie '# {myBean.greeting}' verwenden. – BalusC

Antwort

1

Danke für Ihre Hilfe Kukeltje & BalusC.

Ich habe jetzt ein funktionierendes Beispiel, das sowohl die Übergabe eines Bean- als auch eines Methodennamens als Parameter demonstriert. Für alle, mit dem gleichen Problem, hier ist es:

BeanA.java:

package com.test; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 

@ManagedBean 
public class BeanA implements Serializable{ 
    public String getHello(){ 
    return "hello from BeanA"; 
    } 
    public String getGoodbye(){ 
    return "goodbye from BeanA"; 
    } 
} 

BeanB.java:

package com.test; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 

@ManagedBean 
public class BeanB implements Serializable{ 
    public String getHello(){ 
    return "hello from BeanB"; 
    } 
    public String getGoodbye(){ 
    return "goodbye from BeanB"; 
    } 
} 

index.xhtml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
    <title>test</title> 
</h:head> 
<h:body> 

    Passing in beanA as a parameter:<br/> 
    <ui:include src="included1.xhtml" > 
    <ui:param name="myBean" value="#{beanA}" /> 
    </ui:include> 
    <hr/> 
    Passing in beanB as a parameter:<br/> 
    <ui:include src="included1.xhtml" > 
    <ui:param name="myBean" value="#{beanB}" /> 
    </ui:include> 
    <hr/> 
    Passing in beanA and method 'hello' as parameters:<br/> 
    <ui:include src="included2.xhtml" > 
    <ui:param name="myBean" value="#{beanA}" /> 
    <ui:param name="myMethod" value="hello" /> 
    </ui:include> 
    <hr/> 
    Passing in beanA and method 'goodbye' as parameters:<br/> 
    <ui:include src="included2.xhtml" > 
    <ui:param name="myBean" value="#{beanA}" /> 
    <ui:param name="myMethod" value="goodbye" /> 
    </ui:include> 
    <hr/> 
    Passing in beanB and method 'hello' as parameters:<br/> 
    <ui:include src="included2.xhtml" > 
    <ui:param name="myBean" value="#{beanB}" /> 
    <ui:param name="myMethod" value="hello" /> 
    </ui:include> 
    <hr/> 
    Passing in beanB and method 'goodbye' as parameters:<br/> 
    <ui:include src="included2.xhtml" > 
    <ui:param name="myBean" value="#{beanB}" /> 
    <ui:param name="myMethod" value="goodbye" /> 
    </ui:include> 
    <h:messages /> 

</h:body> 
</html> 

included1.xhtml:

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

    #{myBean.hello} 

</ui:composition> 

enthalten2.XHTML:

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 

    #{myBean[myMethod]} 

</ui:composition> 

Output:
Passing in Beana als Parameter:
Hallo von Beana

Passing in beanB als Parameter:
Hallo von BeanB

Übergabe von BeanA und Methode 'Hallo' als Parameter:
Hallo von BeanA

Passing in Beana und Methode 'Auf Wiedersehen' als Parameter:
Wiedersehen von Beana

Passing in beanB und Verfahren 'Hallo' als Parameter:
Hallo von BeanB

Passing in beanB und Methode 'tschüss' als Parameter: Auf Wiedersehen von BeanB

Verwandte Themen