如何访问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 方法访问。
在我的 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 方法访问。