# Tags in Tags?



## bronks (26. Jan 2005)

Mein Problem liegt darin, daß ich einen Tag in einem Tag verwenden möchte. Ich hab leider keine Infos dazu finden können, wie man das richtig macht.

<app:tabtag text="*<jsp:getProperty name="projekt" property="Überschrift1"/>* " width="100" fontcolor="white" bgcolor="blue"/>

In o.g. Beispiel möchte ich einem Tag die Daten aus einer Bean übergeben. So funktioniert es nicht. Kann mir bitte jemand sagen, wie man das macht. 

Danke!


----------



## foobar (26. Jan 2005)

Du mußt in der TLD das Attribut rtexprvalue auf true setzen.

```
<tag>
         <name>tabtag</name>
          <tag-class>myClass</tag-class>
         <attribute>
                  <name>text</name>
                   <required>true</required>
                    <rtexprvalue>true</rtexprvalue>
         </attribute>                            
         </tag>
```


----------



## bronks (26. Jan 2005)

foobar hat gesagt.:
			
		

> ... rtexprvalue ...


Danke! Das hat schon mal geholfen. Jetzt funktioniert z.B. das:

<app:tabtag text="*<%= "IrgendeinText"%>*" width="100" fontcolor="white" bgcolor="blue"/>

Der "jsp:getProperty" wollte trotzdem nicht. Wenn sich Tags nicht so einwandfrei schachteln lassen, dann dachte ich, daß ich einfach Expressions hernehme, wie oben auch. Falsch gedacht oder nicht?

Folgender Codeauszug:

```
...
<logic:iterate id="projekt" name="projekte" property="artikel">
   <app:tabtag text="<%= projekt.ueberschrift%>" width="100" fontcolor="white" bgcolor="blue"/>
...
```

Die Fehlermeldung heißt: "Variable ueberschrift not found in java.lang.objekt". Wenn ich die ganze Sache im Debugger durchstotter, dann sehe ich ein "projekt" welches eine "ueberschrift" enthält. Wo liegt der Fehler? Wer kann helfen?

Danke!


----------



## foobar (26. Jan 2005)

> Die Fehlermeldung heißt: "Variable ueberschrift not found in java.lang.objekt".


Von welchem Typ is denn die Variable Projekt? 
Fehlt dir vielleicht ein cast?


----------



## bronks (26. Jan 2005)

foobar hat gesagt.:
			
		

> ... Von welchem Typ is denn die Variable Projekt?
> Fehlt dir vielleicht ein cast?


Variable Projekt ist eine Bean. Wenn ich es caste, dann Funktioniert es, aber der JSP-Code ist jetzt m.E. ein Fall fürs Gruselkabinett.  :shock: 


```
...
<logic:iterate id="projekt" name="projekte" property="artikel"> 
<%  model.Projekt projekt1 = (model.Projekt) projekt; %>
<app:tabtag text='<%= projekt1.getUeberschrift()%>' width="100" fontcolor="white" bgcolor="blue"/>
...
```

Und wohl gemerkt. Ich muß auf ein neues Objekt ("projekt1) casten, weil "projekt" schon existiert. Beim Debuggen im Datainspektor sind "projekt" und "projekt1" absolut gleich. Ich versteh nicht warum er das gecastet haben will, wenn die Struktur schon paßt.  :?: 

Muß in diesem scheinbar speziellen Fall der JSP-, besser gesagt Java-Code in der JSP so aussehen oder habe ich hier amateurhaften Pfusch produziert?  :?


----------



## foobar (27. Jan 2005)

Mach das doch so:

```
<logic:iterate id="projekt" name="projekte" property="artikel">
<app:tabtag text='<%=  ((model.Projekt) projekt).getUeberschrift(); %>' width="100" fontcolor="white" bgcolor="blue"/>
```

Ansosnten guck dir mal die ExpressionLanguage an, damit kannst du das nochmal etwas verkürzen.


----------



## bronks (27. Jan 2005)

foobar hat gesagt.:
			
		

> ... ExpressionLanguage ...


Deine Lösung finde ich echt elegant. 

ExpressionLanguage ist ein gutes Stichwort.

Danke!


----------



## KSG9|sebastian (27. Jan 2005)

ih...also wenn man schon logic-tags und beans verwendet mit "<logic:iterate>" dann haben sachen wie "<jsp:getProperty...>" o.ä. nix mehr verloren. Dann nimmt man lieber schöne sachen wie "<bean:write name="aus_logic:iterate_tag_übernehmen" property="ueberschrift">, dass macht das ganze viel schöner und übersichtlicher.,..


----------



## bronks (27. Jan 2005)

KSG9|plak hat gesagt.:
			
		

> ... "<bean:write ...


Das war mein erstes Versuchskaninchen. Aber doch klar, hast recht.

@all:
Genau in diesem Zusammenhang habe ich noch eine Frage, die schon fast einen eigenen Topic verdient hätte, aber dann würde der Zusammenhang fehlen.

Bei jedem Iterate-Durchgang hab ich ein "projekt", welches bei jedem Durchgang andere Daten enthält. Jetzt experimentiere ich schon seit viel zu lange mit <html:link .....> herum und komme nicht wirklich vorwärts. Viele Infos hab ich schon im Web gefunden, aber ... ... naja halt nicht schlau geworden.

Was will ich erreichen: Ich möchte einen Link erzeugt bekommen, der als Parameter die Daten aus "projekt" an eine Action schickt.

Soweit bin ich mir sicher, daß alles paßt: *<html:link action="/projektUebersichtAction"* Wie zwinge ich dem Link jetzt auf, daß die Daten aus dem Bean "projekt" mit an die Action geschicht werden. Hab schon alle möglichen Kombinationen probiert, aber ... nichts. Bitte einen Tip. Evtl. noch einen ganz kurzen Hinweis mit welcher Technik ich in der Action, dann die Daten begrüßen muß? 

Danke!


----------



## KSG9|sebastian (27. Jan 2005)

ich versteh dich net so ganz, meinst du vielleicht, dass du dem link parameter mitgeben kannst, sowas wie

http://www.abc.de/index.php?*id=23*

Das funktioniert so:


```
<html:link action="abc.do?do=delete" paramName="beanname" paramProperty="variable aus dem bean" paramId="name des parameters">Löschen</html:link>
```

Ich hoffe das war verständlich.

paramId=...   - Der Wert gibt an, mit der Parameter, der im request gespeichert wird, heisen soll.

paramName=...  - Da steht der Name deines Beans
paramProperty=..- Der Name eines Attributes aus der JavaKlasse


----------



## bronks (27. Jan 2005)

@KSG9|plak:
Danke für Deine Antwort. So habe ich es jetzt gemacht.

Eigentlich wollte ich statt einem einzelnen Parameter die ganze Bean schicken. Jetzt ist mir auch schon klar, daß das mit dem serialisieren nicht funktioniert. Man hätte sich wieder einen Datenbankzugriff gespart.


----------



## KSG9|sebastian (27. Jan 2005)

du könntest den bean in den request stecken....ist aber kein sauberer stil


----------

