# Facelets: Dynamische Attribute



## MrWhite (1. Sep 2009)

Hallo!

Bitte entschuldigt das Crossposting, aber ich gehe nicht davon aus, dass mir im javacore Forum jemand antwortet (das schliesse ich aus den Zeitstempeln im J2EE Forum dort).

Hier das Original:



> Hallo,
> 
> ich versuche eine ui:composition mehrfach zu inkludieren, jedoch will ich beim Inkludieren angeben, welche id die Komposition erhalten soll (und evtl. welche Datenquelle genutzt werden soll). Ich will also manche Attribute der Komposition im Markup beim Inkludieren setzen.
> 
> ...



(Java Forum @ javaCore.de :: Thema anzeigen - Facelets: Dynamische Attribute)

Weiss jemand ob das überhaupt geht? Vielleicht mit einem Workaround? Bin für jeden Hinweis dankbar.

Mfg.
MrWhite


----------



## MrWhite (1. Sep 2009)

Wenn keiner darauf eine Antwort hat, dann erzaehlt mir doch bitte mal, wie ihr Redundanzen im Code vermeidet. Ich hab doch null Bock darauf zweimal das gleiche Markup zu haben, bei dem sich nur ein Attribut (wie z.B. die id) unterscheidet. 

Ich will flexible Kompositionen.


----------



## faulelotte (2. Sep 2009)

Zum einen in diesem Artikel ist z.B. beschrieben wie es zu tun ist.
http://www.ibm.com/developerworks/java/library/j-facelets/

Zum anderen Beispielcode

Template
[XML]
<!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:ui="http://java.sun.com/jsf/facelets" 
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:rich="http://richfaces.org/rich">

<ui:composition>

    <ui:remove>
        This xhtml is to render a progressbar.

        Attributes:
            text  - text to display in front of the progressbar
            value - the value to display as text and in progressbar 
    </ui:remove>

    <div id="progressBar">
        <ul>
            <li>
            	<hutputText id="progressBar-text" value="${text}" />
            </li>
            <li>
        	    <div id="progressBar-progressState" class="progress-bar-block progress-bar-width progress-bar-shell" style="">
        			<div id="progressBar:upload" class="progress-bar-height progress-bar-uploaded null" style="width: ${value}%" />
        		</div>
            </li>
            <li>
    	       <hutputText id="progressBar-value" value="( ${value} % )" />
            </li>
        </ul>
	</div>
</ui:composition>
</html>
[/XML]

Und die Nutzung des Templates:
[XML]
<tagrogressBar text="#{msg.RegistrationProgress}" value="#{registrationBean.registrationProgress}"/>
[/XML]

Deklaration des Taglibs
[XML]
<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
  "https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd">

<facelet-taglib>
	<namespace>removed to protect the innocent</namespace>
    <tag>
        <tag-name>progressBar</tag-name>
        <source>../tags/progressbar.xhtml</source>
    </tag>
</facelet-taglib>
[/XML]




> Bitte entschuldigt das Crossposting, aber ich gehe nicht davon aus, dass mir im javacore Forum jemand antwortet (das schliesse ich aus den Zeitstempeln im J2EE Forum dort).



Dazu mal ein wenig was, schamlos aus phpforum "geklaut". Ich hoffe dafür erschiesst mich niemand. 

*Nimm niemals an, du hättest ein Recht auf eine Antwort.*

Das hast du nicht. Schließlich hast du für diese Dienstleistung nicht bezahlt. Du wirst eine Antwort bekommen, indem du eine sinnvolle, interessante und zum Denken anregende Frage stellst, die indirekt zum Wissen der Gemeinschaft etwas beiträgt, und nicht nur passiv das Wissen anderer anzapft.

*Signalisiere die Bereitschaft zu lernen und in der Lösungsfindung zu helfen.*

Die Fragen "Kann mir jemand einen Tipp geben?", "Was fehlt in meinem Beispiel?" und "Gibt es eine Web-Seite, die ich gesehen haben sollte?" sind wesentlich erfolgversprechender als "Bitte gebt mir die exakte Anleitung, die ich befolgen soll", weil du damit zeigst, dass du den Prozess wirklich zu Ende führen willst, wenn dich jemand in die richtige Richtung weist.

*Kennzeichne deine Fragen nicht als "Wichtig", auch wenn sie es für dich sind*

Das ist dein Problem, nicht unseres
Dringlichkeit anzumelden ist eher kontraproduktiv: Viele werten die Mitteilung als frechen und selbstsüchtigen Versuch, sofortige und besondere Aufmerksamkeit zu erheischen, und dich ignorieren.

*Höflichkeit tut nie weh und hilft manchmal*

Sei höflich. Verwende "Bitte" und "Danke für eure Aufmerksamkeit" oder "Danke für die Mühe"
Zeige, dass du die Zeit schätzt, die andere damit verbringen, dir unentgeltlich zu helfen. Um ehrlich zu sein, ist Höflichkeit nicht so wichtig wie (und auf keinen Fall Ersatz für) grammatikalische Korrektheit, Klarheit, Genauigkeit und inhaltliche Vollständigkeit, Fehlen von Formatierung usw. Wenn dich das wundert, denke daran, dass wir eine Frage nach ihrem Lerneffekt beurteilen. In jedem Fall, wenn du deine Hausaufgaben in technischer Hinsicht gemacht hast, erhöht Höflichkeit die Wahrscheinlichkeit einer Antwort.

Just my 2 ct


----------



## MrWhite (2. Sep 2009)

You, Sir, made my day!

Ich hab mich echt dumm und deppert gegooglet aber nichts gefunden. Schade ist nur, dass man einen Workaround fuer MethodExpressions braucht und so die erweiterten Method Expressions von Seam nicht eingesetzt werden können. Aber damit kann man leben.


----------

