如何访问EL中的常量?

时间:2015-06-24 22:33:12

标签: jsp servlets jstl el

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

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

这是我的例子:

我有一个班级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;
   }
}

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

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

我有一个servlet RoleServlet,我正在创建一个RoleDTO对象列表,并将其设置为请求对象作为属性名称与RoleConstant类中定义的常量相同的属性,在转发到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个对象的列表,并根据其内容启用或禁用&lt; 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>

但是上面的代码不起作用,即使有<select>个对象的列表,RoleDTO 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>个对象的列表时,RoleDTO html元素显示为已启用

在这种情况下,我无法进行硬编码。谁能告诉我如何让这个工作?

由于

1 个答案:

答案 0 :(得分:0)

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