# links aus xml generieren



## Search (26. Apr 2005)

hallo zusammen

auf einer administrationsseite (jsp) wird ein menu mit verschiedenen links angezeit. je nach umgebung sollen nun die entsprechenden links angezeigt werden. diese links werden in einem xml file definiert. habs nun so weit dass ich alle benötigten links aus dem xml lesen kann. wie bekomme ich diese nun auf meine jsp seite? ist es irgendwie möglich beim serverstart das xml zu lesen und dann ein jsp zu generieren (also das menu aufzubereiten)? oder wie könnte man das anders lösen? 

bin für tips dankbar, gruss


----------



## Bleiglanz (26. Apr 2005)

schreib einen contextListener, der beim hochfahren die xml datei mit einem stylesheet (xsl) in eine html oder jsp transformiert...

oder machs dynamisch (ist besser) in einer jsp mit der JSTL


----------



## search (26. Apr 2005)

danke für die antwort. jstl tönt interessant, habe jedoch noch nie was damit gemacht. wird damit wenn die seite geladen wird dirket auf das xml zugegriffen und in meinem fall die links ausgelesen? hast du evtl. ein kleines beispiel? 

danke & gruss


----------



## Bleiglanz (26. Apr 2005)

```
<c:import url="xmlSource.xml" var="xml" />
 <c:import url="xmlXsl.xsl" var="xsl" />
 <x:transform xml="${xml}" xslt="${xsl}" var="source" />
```


----------



## search (26. Apr 2005)

aha, was beinhaltet denn dieses *.xls file? 

werd mir das mal noch genauer anschauen. danke schon mal. 

gruss


----------



## Search (27. Apr 2005)

hallo

kann ich auch das file auslesen und durch iterieren? irgendwie so:


```
<c:import var="rssFeed" url="/WEB-INF/Config.xml"/>
<x:parse var="rss" xml="${rssFeed}"/>
```

und danach durch das file iterieren mit <x:forEach>. wär das möglich?

gruss


----------



## Search (27. Apr 2005)

so, ich nochmal

habs nun soweit:


```
<c:import var="rssFeed" url="/WEB-INF/Config.xml"/>
			<x:parse var="rss" xml="${rssFeed}"/>

			<x:forEach select="$rss//*[name()='menuoption']">
                      <tr>
			  <td><logic:notEqual name="action" value='<x:out select="./*[name()='link']"/>' scope="request"></td>
		      </tr>
			</x:forEach>
```

nun bekomme ich beim value='<xut select="./*[name()='link']"/>' immer folgenden fehler: "Das Attribut link hat keinen Wert". Wie muss ich das umschreiben damit das so funktioniert? der <xut select="./*[name()='link']"/>-Befehl an sich funktioniert so. 

danke & gruss


----------



## Bleiglanz (27. Apr 2005)

warum nicht

//link


----------



## Search (27. Apr 2005)

stimmt! vielen dank. funktioniert auch so. nur das problem ist, das ich den tag nicht in einem weiteren verwenden kann. also das:

<logic:notEqual name="action" value='*<xut select="./*[name()='link']"/>*' scope="request">

funktioniert so nicht. ne idee wie ich das anders löschen könnte? die value wird nicht ausgelesen aus dem tag. 

danke & gruss


----------



## Search (27. Apr 2005)

komme einfach nicht weiter... bis jetzt habe ich folgendes:


```
<c:import var="rssFeed" url="/WEB-INF/Config.xml"/>
			<x:parse var="rss" xml="${rssFeed}"/>

			<x:forEach select="$rss//menuoption">			  
				<x:set var="fooBar" select=".//name"/>
			  	<x:out select="$fooBar"/>, <x:out select="$action"/> // nur zum testen	    
			    <c:choose>
			      <c:when test="${fooBar == $action}">do this</c:when>
			      <c:otherwise>do that</c:otherwise>
		        </c:choose>
			</x:forEach>
```

der compare stimmt jedoch so nicht... die variabeln werden so nicht auf ihren inhalt verglichen... müsste es so oben wie im testfall machen... dann stimmen die werte... wie ich das machen muss habe ich bisher jedoch nicht herausgefunden... das problem liegt wohl an dem <c:when... gibt es eine möglichkeit mit einem <x:when den selben vergleich zu machen? oder wie könnte man das sonst noch vergleichen? jemand eine idee? komme echt nicht mehr weiter...

danke & gruss


----------



## Bleiglanz (28. Apr 2005)

was für eine fehlermeldung?

BTW == ist an der Stelle wohl falsch, wie fast immer in java, wenn man zwei objekte "inhaltlich" vergleichen will


----------



## Search (28. Apr 2005)

fehlermeldung wird keine ausgegeben. der wert von fooBar ist halt einfach null was er eigentlich gar nicht ist. mit einem <xut wird der wert korrekt ausgegeben. wie müsste ich die den anders vergleichen? ein equals wirds hier wohl kaum geben. oder gibt es eine möglichkeit mit <x:when zwei variabeln zu vergleichen? bin bisher nicht fündig geworden. oder wäre es möglich den <c:when anders zu schreiben? ist etwas wirr die ganze sache. 

was ich nicht verstehe ist das ich folgendes nicht machen kann:


```
<c:set var="test">
  <x:out select=".//name"/>
</c:set>
```

wieso geht das nicht? habe beispiele gefunden wo es eigentlich genau so aussieht. mache ich beim einlesen des files einen fehler (das funktioniert eigentlich)?

danke & gruss


----------



## Search (28. Apr 2005)

der oben genannte fehler (<c:set>) gibt folgenden fehler aus:

[28.04.05 08:25:39:519 CEST] 2501fb0e WebGroup      E SRVE0026E: [Servlet-Fehler]-[javax/servlet/jsp/el/ELException]: java.lang.NoClassDefFoundError: javax/servlet/jsp/el/ELException
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:1753)
	at java.lang.Class.getDeclaredMethods(Class.java:1219)
	at java.beans.Introspector$1.run(Introspector.java:1120)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1118)
	at java.beans.Introspector.getTargetMethodInfo(Introspector.java:983)
	at java.beans.Introspector.getBeanInfo(Introspector.java:387)
	at java.beans.Introspector.getBeanInfo(Introspector.java:158)
	at java.beans.Introspector.getBeanInfo(Introspector.java:219)
	at java.beans.Introspector.<init>(Introspector.java:368)
	at java.beans.Introspector.getBeanInfo(Introspector.java:158)


----------



## Search (28. Apr 2005)

gibts irgend ne möglichkeit die beiden zu vergleichen:


```
<x:out select="$option"/>
```

vergleichen mit


```
<c:out value="${action}"/>
```

gruss


----------

