Java 使用动作数据模型值调用Struts2 JSP中的静态方法帮助器类
我是个菜鸟。我将Struts2与动作中的典型数据模型Java 使用动作数据模型值调用Struts2 JSP中的静态方法帮助器类,java,jsp,struts2,static,ognl,Java,Jsp,Struts2,Static,Ognl,我是个菜鸟。我将Struts2与动作中的典型数据模型UserItem一起使用。当与Struts标记一起使用时,datamodel看起来不太好 我要做的是编写一个静态util方法Helper.printNice(Foo),它接受参数Foo并在用户友好的显示中打印出Foo中包含的值 如何将Struts属性标记与静态方法一起使用?像这样的 com.helper.helper.printNice() 原因是我的web应用程序正在读取由供应商填充的数据,在许多列中看起来像[“string1”、“strin
UserItem
一起使用。当与Struts标记一起使用时,datamodel看起来不太好
我要做的是编写一个静态util方法Helper.printNice(Foo)
,它接受参数Foo并在用户友好的显示中打印出Foo中包含的值
如何将Struts属性标记与静态方法一起使用?像这样的
com.helper.helper.printNice()
原因是我的web应用程序正在读取由供应商填充的数据,在许多列中看起来像[“string1”、“string2”…]。显然,我不想以这种格式向最终用户显示。helper方法将使其看起来像string1string2
等。EDIT 从2.3.20及更高版本,即使在配置中激活
对于静态方法访问,您需要: 在Struts.xml中
在JSP中
但正如rees所指出的,如果不是严格必要的话,这应该避免,因为这不是最佳实践
在您的特定情况下,我猜包含[“String1”、“String2”、…]的对象是一个列表、向量或类似的东西
那么JSP中所需的就是如下所示的
标记:
对于静态方法访问您必须在struts.xml
文件中添加常量
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
在哪里,
vs
=值堆栈getSTR()
=方法名<b>Output :</b> <s:property value="@vaannila.SampleAction@getSTR()"/> <br>
<b>Output :</b> <s:property value="@vs@getSTR()"/> <br>
<b>Output :</b> <s:property value="%{STR}"/> <br>
输出:
在哪里,
STR
=STR
在Java类中使用getter和setter方法声明并初始化为静态字符串可以在Struts2中使用OGNL访问静态方法(只要在struts.xml中打开它并使用@符号),但实际上不需要这样做,而且这不是最佳做法。为什么不在您的操作或模型上提供一个漂亮的打印方法,您可以从值堆栈在jsp中访问该方法,就像访问任何其他值一样?@rees似乎是对我的回答,而不是评论。:)非常感谢你的建议。太有用了。我考虑使用helper方法,因为我的数据模型UserItem有许多Foo1、Foo2等字段。。。使用与formmat相同的数据。因此,我会调用一个helper方法并传入Foo1,Foo2来进行漂亮的打印。当然,我也会尝试您的最佳实践建议。@user1775967-如果您的操作很简单,您也可以在jsp中对字符串本身使用类似于字符串.replace()的方法。
<b>Output :</b> <s:property value="%{STR}"/> <br>