java-Struts2-使用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
(line: 185, column: 64) Unterminated <s:hidden tag

如果我从s:hidden输入中删除了属性标签,则异常消失,但“ Alias”字符串应位于的位置未显示任何文本.

– 提前致谢

解决方法:

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

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

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

上一篇:java-如何在Struts 2中使用DispatcherListener


下一篇:java-是否可以在JSP中访问后端方法?