Spring中任意Model对象的DataBinding

时间:2015-02-26 10:08:26

标签: java spring data-binding

我有一个枚举(例如Status),其中包含状态代码列表,我想在页面上显示这些状态的有意义字符串(将Status绑定到字符串)。

我还有Project对象,其中Status引用CustomPropertyEditor成功使用StatusString绑定到Project Status }是表单上的命令对象。

但是当我想在页面上显示不属于任何表单的String列表时,如何将Project绑定到有意义的Status

以下代码在显示<c:forEach items="${projects}" var="project" varStatus="row"> <tr> <td><c:out value="${project.status}" /> </tr> </c:forEach> 个对象时始终使用默认的枚举字符串:

{{1}}

2 个答案:

答案 0 :(得分:1)

我这样做的方法是使用spring的MessageSource

<c:forEach items="${projects}" var="project" varStatus="row">
    <tr>
        <td><spring:message code="status.code.${project.status}" />
    </tr>
</c:forEach>

然后你需要在messages_en.properties(或其他语言文件)中使用相应的键:

status.code.Foo=The status is foo
status.code.Bar=The status is bar

Foo和Bar在您的Enum中出现。

答案 1 :(得分:0)

假设您已将Status声明为public enum Status<c:out value="${project.status}" />会调用Status.toString()。进一步假设您没有覆盖toString枚举中的方法Status,使用java.lang.Enum.toString()的默认实现(java.lang.Enum是所有枚举的基类)。 java.lang.Enum.toString()只返回Enum.name

您可以覆盖toString()枚举中的Status方法,返回对用户更有意义的值,也可以调用表示层中枚举类的任何方法。例如,如果您使用方法Status.getTitle(),则可以将其用作<c:out value="${project.status.title}" />