You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Play框架MVC中如何比较枚举的String值与字符串常量

问题原因

  1. 模型层的getStatus方法存在类型定义错误:返回值声明为String,但实际返回的是Status枚举实例,类型不统一直接导致比较逻辑异常。
  2. Play框架的模板引擎会将你代码中双引号包裹的"MODERATED"识别为待解析的变量,而非字符串字面量,因此抛出MODERATED未定义的错误。

解决方案(三种任选即可)

方案1:直接用枚举实例比较(推荐)

首先修正模型层的getter方法,返回正确的枚举类型:

// 修正前错误代码
// public String getStatus() {
//     return status;
// }

// 修正后代码
public Status getStatus() {
    return status;
}

然后在模板中直接对应枚举实例做比较,注意替换成你项目中Status枚举的实际包路径:

#{if programComment.getStatus() == com.yourproject.package.Status.MODERATED}
<div>
 ...
</div>
#{/if}

方案2:调用枚举name方法和字符串字面量比较

如果不想修改getter定义,也可以直接调用枚举的name()方法拿到枚举的字符串名称,用单引号包裹字符串字面量避免模板解析为变量:

#{if programComment.getStatus().name() == 'MODERATED'}
<div>
 ...
</div>
#{/if}

如果你希望getter始终返回字符串,也可以把getter调整为:

public String getStatus() {
    return status.name();
}

之后直接用上面的模板代码比较即可。

方案3:用toString方法比较

如果你没有重写Status枚举的toString()方法,默认情况下toString()和name()返回值完全一致,也可以用该方法比较:

#{if programComment.getStatus().toString() == 'MODERATED'}
<div>
 ...
</div>
#{/if}

内容的提问来源于stack exchange,提问作者asi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:24:07