问题
I'm a Struts2 newbie. I'm using Struts2 with the typical datamodel UserItem
inside an Action. The datamodel doesn't look good when using with the Struts tag <s:property value="userItem.foo"/>
.
What I want to do is write a static util method Helper.printNice(Foo)
that takes parameter Foo and prints out the value contained in Foo in a user-friendly display.
How do I use the Struts property tag with the static method? Something like this
com.helper.Helper.printNice(<s:property value="userItem.foo"/>)
.
The reason for this is my web app is reading data populated by a vendor, which looks like this ["string1", "string2" , ...] in many columns. Obviously, I don't want to display in this format to the end user. The helper method would make it look like string1 <br> string2<br>, etc...
回答1:
EDIT
From 2.3.20 and higher, static method access won't work anymore, even if activated in the configuration.
For static methods access you need:
in Struts.xml
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
in your JSP
<s:property value="@com.your.full.package.Classname@methodName(optionalParameters)" />
But as pointed out by rees, this should be avoided if not strictly necessary, because it's not a best practice.
In your specific case, i guess the Object containing ["String1","String2",...] is a List, or a Vector, or something like this.
Then all you need in your JSP is the <s:iterator>
tag like this:
<s:iterator name="yourObjectContainingAListOfString">
<s:property />
<br/>
</s:iterator>
回答2:
For Static Method Access you must need to add following constant in your struts.xml
file.
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
Example: struts.xml:
<!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" namespace="/" extends="struts-default">
<action name="sampleAction" class="vaannila.SampleAction">
<result name="success">/WEB-INF/JSP/sample.jsp</result>
</action>
</package>
</struts>
Then from your JSP you can access it in various ways:
Example - 1:
<b>Output :</b> <s:property value="@vaannila.SampleAction@getSTR()"/> <br>
Where,
vaannila
= Package Name.SampleAction
= Class Name.getSTR()
= Method Name.
Example - 2:
<b>Output :</b> <s:property value="@vs@getSTR()"/> <br>
Where,
vs
= Value Stack.getSTR()
= Method Name.
Example - 3:
<b>Output :</b> <s:property value="%{STR}"/> <br>
where,
STR
=STR
is declared and initialized as Static String with getter and setter method in your Java Class
来源:https://stackoverflow.com/questions/13080067/calling-static-method-helper-class-in-struts2-jsp-with-action-data-model-value