有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是个菜鸟。我在一个动作中使用Struts2和典型的数据模型UserItem。与Struts标记<s:property value="userItem.foo"/>一起使用时,数据模型看起来不太好

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

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

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


共 (2) 个答案

  1. # 1 楼答案

    编辑

    2.3.20及更高版本static method access won't work anymore,即使在配置中激活


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

    在Struts中。xml

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

    在JSP中

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

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

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

    那么JSP中只需要<s:iterator>标记,如下所示:

    <s:iterator name="yourObjectContainingAListOfString">
       <s:property /> 
       <br/>
    </s:iterator>
    
  2. # 2 楼答案

    对于静态方法访问,您必须在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方法声明并初始化为静态字符串