# statische Variablen in Struts-Tags nutzen?



## 7bkahnt (22. Jun 2010)

Hallo Leute,
kurz und bündig. Ist es möglich mit statischen Variablen in Struts-Tags zu arbeiten?
Weil ich habe eine Liste in der Action, wo ich auch getter und setter natürlich dafür stehen habe.
Bisher hat auch immer alles geklappt damit.
Nun brauche ich aber JSP <%%> um in JS mit der Liste arbeiten zu können.
Um aber in den JSP-Tags die Liste initialisieren zu können, muss diese in der Action static sein.

Und seitdem funktioniert : 
<s:if test="irgenteineList.size()>0">
...
</s:if>

nicht mehr.
Habt ihr da evtl. einen Tipp, wie ich wieder auf die Liste zugreifen kann?

grüsse


----------



## ign0rant (22. Jun 2010)

Mit "@mein.package.MeineKlasse@MeineStatischeVariable" geht das. Statische Methodenaufrufe klappen übrigens ab Struts 2.1 nur noch wenn man struts.ognl.allowStaticMethodAccess auf true setzt.


----------



## 7bkahnt (22. Jun 2010)

Oh ideal. Danke!
Und wo schreib ich "@mein.package.MeineKlasse@MeineStatischeVariable" dann hin?
Und wo kann ich struts.ognl.allowStaticMethodAccess auf true setzen?
Sorry, bin noch recht neu in der Struts-Materie..

grüsse


----------



## ign0rant (22. Jun 2010)

7bkahnt hat gesagt.:


> Und wo schreib ich "@mein.package.MeineKlasse@MeineStatischeVariable" dann hin?



z.B. 

```
<s:if test="@mein.package.MeineKlasse@irgenteineList.size() > 0">
...
</s:if>
```



7bkahnt hat gesagt.:


> Und wo kann ich struts.ognl.allowStaticMethodAccess auf true setzen?



In der struts.xml: 


```
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
  <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> 
  ...
</struts>
```


----------



## 7bkahnt (22. Jun 2010)

Super Sache,
danke für die schnelle Hilfe!

Ich habe es mal ausprobiert aber irendwie scheint es nicht zu funktionieren.
Vielleicht hab ich dich auch falsch verstanden aber meine struts.xml sieht wie folgt aus:


```
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
 <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> 
	<package name="default" extends="hibernate-default">
....
....
```

und die if-abfrage so:

```
<s:if test="@actions.NeueAdresseAction@plzList.size() > 0">
...
</s:if>
```

mein package heißt actions und liegt im src-ordner.
Die Klasse wo die getPlzList() drin steht heißt NeueAdresseAction.java und die Liste plzList.
Gefüllt ist die Liste auf jeden Fall, da ich sie ja schon verwenden kann.
Eigentlich ist es doch aber so, wie ichs eingebunden habe i.O. oder liege ich da falsch?

grüsse


----------



## ign0rant (23. Jun 2010)

Also wenn du schreibst: 

```
<s:if test="@actions.NeueAdresseAction@plzList.size() > 0">
...
</s:if>
```
Dann muss in der Klasse NeueAdresseAction eine public static Variable plzList vorhanden sein. Wenn du stattdessen die Methode getPlzList aufrufen willst (die ebenso public static sein muss), dann musst du schreiben:


```
<s:if test="@actions.NeueAdresseAction@getPlzList().size() > 0">
...
</s:if>
```


----------



## 7bkahnt (23. Jun 2010)

Okay ideal. Danke jetzt funktioniert es.
Dankeschööön


----------

