Struts2 - 从静态列表设置属性使用OGNL无效的String属性

时间:2013-07-18 20:42:27

标签: java struts2 static ognl

我正在尝试使用struts2框架设置隐藏的输入值。输入值是一个不变的值,所以我想通过静态引用设置它,而不是担心在Controller中的多个位置设置它。

以下是列表定义:

     package com.packagename.models;
     public class UsernameModel implements Serializable, Comparable<UsernameModel> {

          ...
          /**
          * <P>A static container of the predefined username types.
          */
          public static final class UsernameTypes {
           public static final String ALIAS = "Alias";
           public static final String ASSIGN_NUM = "Assignment Number";
          }
          ...
      }

我意识到这可能超出了问题的范围,但是当我尝试在隐藏输入中引用属性时会抛出异常:

<s:hidden name="username_type" value="<s:property value="@com.packagename.models.UsernameModel.UsernameTypes@ALIAS" />"></s:hidden>
  

org.apache.jasper.JasperException:/WEB-INF/content/user/profile.jsp   (第185行,第64列)未终止的&lt; s:隐藏标记

如果我从s:hidden输入中删除属性标记,则异常消失,但“别名”字符串应该出现在文本中。

- 提前致谢

1 个答案:

答案 0 :(得分:3)

你不能像这样嵌套标签。要引用内部类,您需要使用$符号。

<s:hidden name="username_type"
          value="%{@com.packagename.models.UsernameModel$UsernameTypes@ALIAS}" />

IMO最好直接在类中使用这种静态变量,而不是从JSP发送它们。