Spring SpEL:使用T()函数在组合框

时间:2015-05-25 07:11:28

标签: spring enums spring-el

我正在寻找一种在组合框中加载枚举的方法(我使用的是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()。那么,为什么我有这个例外?

0 个答案:

没有答案