如何访问EL中的常量?

How to access constants in EL?

在我的 servlet 中,我设置了一个请求属性,其名称来自另一个 class。

在我的 JSP 中,我想使用 EL 访问该请求属性,但是如何告诉 EL 查找请求属性的名称作为另一个 class 的常量字段?

这是我的例子:

我有一个 class RoleDTO:

public class RoleDTO implements Serializable {
   private int roleId;
   private String roleDescription;

   public int getRoleId() {
      return roleId;
   }
   public void setRoleId(int roleId) {
      this.roleId = roleId;
   }
   public String getRoleDescription() {
      return roleDescription;
   }
   public void setRoleDescription(String roleDescription) {
      this.roleDescription = roleDescription;
   }
}

我有一个 class RoleConstant,它定义了一个常量:

public class RoleConstant {
   public static final String ROLE_LIST = "roleDTOs";
}

我有一个 servlet RoleServlet,我在其中创建一个 RoleDTO 对象的列表并将其设置为请求对象作为属性,其属性名称与 [=16= 中定义的常量相同] class,转发到role.jsp之前:

public class RoleServlet extends HttpServlet {
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      List<RoleDTO> roleDTOList = new ArrayList<RoleDTO>();
      RoleDTO roleDTO1 = new RoleDTO();
      roleDTO1.roleId = 1;
      roleDTO1.roleDescription = "Administrator";
      roleDTOList.add(roleDTO1);
      RoleDTO roleDTO2 = new RoleDTO();
      roleDTO2.roleId = 2;
      roleDTO2.roleDescription = "Guest";
      roleDTOList.add(roleDTO2);
      request.setAttribute(RoleConstant.ROLE_LIST, roleDTOList);
      RequestDispatcher view = request.getRequestDispatcher("role.jsp");
      view.forward(request, response);
   }
}

role.jsp 中,我按名称访问请求属性以获取 RoleDTO 对象的列表,并根据其启用或禁用 <select> html 元素内容:

<c:if test="${empty Test05Constant.ATTRIBUTE_ROLE_LIST}">
   <select id="select_role" name="select_role" disabled="disabled">
   </select>
</c:if>

<c:if test="${not empty Test05Constant.ATTRIBUTE_ROLE_LIST}">
   <select id="select_role" name="select_role">
   </select>
</c:if>

但是上面的代码不起作用,即使存在 RoleDTO 个对象列表,<select> html 元素也显示为禁用。

如果我像这样硬编码请求属性名称:

<c:if test="${empty roleDTOs}">
   <select id="select_role" name="select_role" disabled="disabled">
   </select>
</c:if>

<c:if test="${not empty roleDTOs}">
   <select id="select_role" name="select_role">
   </select>
</c:if>

然后它工作并且 <select> html 元素显示为启用时 RoleDTO 对象列表

在这种情况下我不能进行硬编码。谁能告诉我如何让它工作?

谢谢

我们无法访问 jstl 中的静态变量。对于解决方法,我们可以将静态变量分配给非静态变量,然后尝试访问它。作为参考,您可以通过 For workaround please go through 或者我能想到的另一种方式是通过 setter 方法访问。