2009-03-21 5 views
1

Ich entwickle eine benutzerdefinierte Komponente mit JSF 1.2. Meine Tag-Klasse erweitert UIComponentELTag und hat Variablen vom Datentyp ValueExpression. Die Werte für diese werden aus den entsprechenden Attributen des Tags gesetzt. (Mit setProperties Funktion) Beispiel,JSF 1.2 Benutzerdefinierte Komponente - Body Inhalt von Backing Bean

<sr:show name="#{backingBean.name}" ...> #{backingBean.mainContent}</sr:show> 

ich stecken bin, wenn ich versuche, die Bodycontent des Tags als verbindlichen Wert zu erhalten. Dies ist , wie weit ich fort: Dies ist der Code in doAfterBody()

public int doAfterBody() throws JspException{ 
if(bodyContent!=null) { 
String body = bodyContent.getString(); 
FacesContext context = FacesContext.getCurrentInstance(); 
UIComponent component = super.findComponent(context); 
MyComp myComp= (MyComp) component; 
myComp.setMain(body); 

} 
bodyContent.clearBody(); 
return SKIP_BODY; 
}

Wenn der Körper des Tags nicht verbindlich Wert enthält, dieser Code funktioniert gut. Ich möchte prüfen, ob der Körper einen Bindungswert hat und dann den Wert aus der Bean setzen. In JSF 1.1 habe ich das mit isValueReference (body) überprüft. Wie erreiche ich das in JSF 1.2?

Ich konnte keine Beispiele finden, um den Körperinhalt irgendwo als verbindlichen Wert zu erhalten. Bitte hilf mir.

Danke.

Antwort

0

Warum nicht einfach eine andere Variable hinzufügen, z. "contents" und binden Sie das an den Fließtext, den Sie rendern möchten?

<sr:show name="#{backingBean.name}" text="#{backingBean.mainContent}" /> 

Oder einfach:

<sr:show bean="#{backingBean} /> 

und die ganze Menge machen.

+1

Wenn der Benutzer den Wert direkt ohne eine Bean angeben möchte, ist es ratsam, eine ganze Menge Inhalt als Teil des Tag-Attributs zu platzieren (wie text = mainContent, wo mainContent großen Inhalt oder XML oder irgendetwas anderes enthalten kann)) Das benutzerdefinierte Tag sollte sowohl den Bindungswert als auch den direkten Wert unterstützen. –

+0

Ich lerne gerade dieses Zeug selbst - Entschuldigung. Abhängig davon, wie viel Logik Sie gegenüber der Formatierung haben, könnten Sie einfach Facelets Kompositionskomponenten dafür verwenden. Außerdem können Sie die Präsentationslogik in ein Tag trennen und eine Variable mit dem Ergebnis festlegen. Verwenden Sie dann andere Elemente zum Formatieren. –

+0

Ich erlaube, dass der Hauptinhalt in den Textkörper des Tags eingegeben wird. Und ich stelle auch einen Attributtext zur Verfügung, der einen Wertausdruck annehmen kann. Auf diese Weise kann der Benutzer formatierten fest codierten Text in den Textkörper des Tags eingeben oder er kann den Wert des Textattributs aus dem Hintergrund des Beans bereitstellen. Ich habe mich mit dieser Lösung zufrieden gegeben. Hoffe, dass andere diese Information nützlich finden. –