4

我是 Struts2 新手。我将 Struts2 与UserItemAction 中的典型数据模型一起使用。与 Struts 标签一起使用时,数据模型看起来不太好<s:property value="userItem.foo"/>

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

如何在静态方法中使用 Struts 属性标记?像这样 的东西com.helper.Helper.printNice(<s:property value="userItem.foo"/>)

这样做的原因是我的网络应用程序正在读取由供应商填充的数据,在许多列中看起来像这样 ["string1", "string2" , ...]。显然,我不想以这种格式向最终用户显示。辅助方法会使其看起来像 string1 <br> string2<br> 等...

4

2 回答 2

7

编辑

2.3.20 和更高版本开始静态方法访问将不再起作用,即使在配置中激活也是如此。


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

在 Struts.xml 中

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

在你的 JSP 中

<s:property value="@com.your.full.package.Classname@methodName(optionalParameters)" />

但正如 rees 所指出的,如果不是绝对必要的话,应该避免这样做,因为这不是最佳实践。

在你的具体情况下,我猜包含 ["String1","String2",...] 的对象是一个列表,或者一个向量,或者类似的东西。

那么您在 JSP 中所需要的只是这样的<s:iterator>标签:

<s:iterator name="yourObjectContainingAListOfString">
   <s:property /> 
   <br/>
</s:iterator>
于 2012-10-26T09:47:28.553 回答
1

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

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

示例: 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>

然后从您的 JSP 中,您可以通过各种方式访问​​它:

示例 - 1:

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

在哪里,

  1. vaannila= 包名称。
  2. SampleAction= 班级名称。
  3. getSTR()= 方法名称。

示例 - 2:

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

在哪里,

  1. vs= 价值栈。
  2. getSTR()= 方法名称。

示例 - 3:

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

在哪里,

  1. STR=STR在您的 Java 类中使用 getter 和 setter 方法声明并初始化为静态字符串
于 2014-07-10T09:36:58.090 回答