Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用动作数据模型值调用Struts2 JSP中的静态方法帮助器类_Java_Jsp_Struts2_Static_Ognl - Fatal编程技术网

Java 使用动作数据模型值调用Struts2 JSP中的静态方法帮助器类

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

我是个菜鸟。我将Struts2与动作中的典型数据模型
UserItem
一起使用。当与Struts标记一起使用时,datamodel看起来不太好

我要做的是编写一个静态util方法
Helper.printNice(Foo)
,它接受参数Foo并在用户友好的显示中打印出Foo中包含的值

如何将Struts属性标记与静态方法一起使用?像这样的
com.helper.helper.printNice()

原因是我的web应用程序正在读取由供应商填充的数据,在许多列中看起来像[“string1”、“string2”…]。显然,我不想以这种格式向最终用户显示。helper方法将使其看起来像string1
string2
等。

EDIT

2.3.20及更高版本,即使在配置中激活


对于静态方法访问,您需要:

在Struts.xml中


在JSP中


但正如rees所指出的,如果不是严格必要的话,这应该避免,因为这不是最佳实践

在您的特定情况下,我猜包含[“String1”、“String2”、…]的对象是一个列表、向量或类似的东西

那么JSP中所需的就是如下所示的
标记:




对于静态方法访问您必须
struts.xml
文件中添加常量

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/> 
在哪里,

  • vs
    =值堆栈
  • getSTR()
    =方法名
  • 示例-3:

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