Calling static method helper class in Struts2 JSP with Action data model value

流过昼夜 提交于 2019-11-28 08:23:41

问题


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,

  1. vaannila = Package Name.
  2. SampleAction = Class Name.
  3. getSTR() = Method Name.

Example - 2:

<b>Output :</b> <s:property value="@vs@getSTR()"/> <br>

Where,

  1. vs = Value Stack.
  2. getSTR() = Method Name.

Example - 3:

<b>Output :</b> <s:property value="%{STR}"/> <br>

where,

  1. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!