我需要访问jsp中的一些常量,遗憾的是EL不提供任何功能。 有一些选项,如非标准标签库,但我想保持它更标准。
我试过了:
<%@ page import = "com.jackdane.Constants"%>
<c:if test="${object.display == '<%=com.jackdane.Constants.YES %>}'">
//some display logic
</c:if>
但这似乎并没有成功。 我已经使用了一个表达式已经有一段时间了,所以我可能犯了一个错误。任何意见都表示赞赏。
编辑:
为了澄清,常量类不在我的控制范围内。它在我收到的jar文件中。
它包含无getter / setters 。
只需private static final Strings
。
答案 0 :(得分:1)
public class Constants
{
public static final String YES = "yes";
public String getYES()
{
return YES;
}
}
jsp
<jsp:useBean id="cons" class="com.abc.Constants" scope="session"/>
<c:if test="${object.display == cons.YES}">
答案 1 :(得分:0)
Jigar Joshi的回答对我来说很好看。如果你不能修改常量类,那么只需将其包装到另一个类中:
public class ConstantsAccessor {
public String getYES() {
return Constants.YES;
}
}
答案 2 :(得分:0)
该主题是关于如何使用EL访问常量。我问的是在EL中使用表达式时出错的地方。
Scriptlets和EL不在相同的上下文中运行。虽然有变通方法/黑客攻击,但大家一致认为你不应该混淆它们。使用其中一个。由于scriptlet是discouraged十年以来,EL是最佳选择。我建议改用enum。即使您无法直接引用它们,也可以将它们表示为字符串。
public class Foo {
public enum Display {
YES, NO
}
private Display display;
// ...
}
与
<c:if test="${foo.display == 'YES'}">
...
</c:if>