我正在寻找一种在组合框中加载枚举的方法(我使用的是JSTL),而不是将它放在模型属性中我因为这个原因使用SPEL而且我找到了使用它的不同示例。我正在尝试使用此解决方案
<form:select path="status">
<option class="" value=""><s:message code="optLabel" /></option>
<c:forEach var="enum" items="${T(com.mypackage.enums.Status).values()}">
<option>...</option>
</c:forEach>
</form:select>
并使用此解决方案
<select>
<option th:each="elem: ${T(com.mypackage.enums.Status).values()}" th:value="${elem.val()}" th:text="#{elem.val()}" value="BAZ">BAZ</option>
</select>
但我在运行时有这个Excpetion“当未指定默认命名空间时,函数T必须与前缀一起使用”
我该怎么办?
这是枚举类:
public enum Status {
VALID("valid"), OLD("old");
private final String val;
Status(String val) {
this.val = val;
}
public String getVal() {
return val;
}
}
另一个澄清......如果我写
<%@ taglib prefix="s" uri="http://www.springframework.org/tags" %>
...
<s:eval expression="T(com.mypackage.enums.Status).VALID == T(com.mypackage.enums.Status).VALID" var="isValid" />
<c:if test="${isValid}">
isValid
</c:if>
这很好用!这让我觉得以这种方式找到并执行函数T()。那么,为什么我有这个例外?