0

我目前正在升级到 Grails 4。在 GSP 页面中无法识别三元运算符的使用。以下代码:

     <td>${(user?.active) ? '<i class="icon icon-plus" style="color: green;"></i> <span style="color: green">Active</span>' : '<i class="icon-remove-circle" style="color: red;"></i> <span style="color: red">Inactive</span>'}</td>

打印字符串而不是显示 fontAwesome 图标。如果我删除周围的单引号,<i class = "icon... >则会产生以下错误。

     unexpected token: ? @ line 190, column 275, it) { return (user?.active) ? <i class                                         
                                                                             ^

这在以前的 Grails 版本中不是问题。除了将代码行转换为 if-else 语句之外,任何人都可以推荐解决方案吗?

这是显示的屏幕截图。

显示的输出图像

4

1 回答 1

2

不是不能识别三元运算符,而是 HTML 被显示为字符串而不是被呈现的问题。这是因为 GSP 表达式(内部${})默认编码为 HTML。

要处理这种情况,请将您的表达式包装在raw()方法中:

<td>${raw(user?.active ? '<i class="icon icon-plus" style="color: green;"></i> <span style="color: green">Active</span>' : '<i class="icon-remove-circle" style="color: red;"></i> <span style="color: red">Inactive</span>')}</td>

如果要为整个页面更改此行为,可以在 GSP 顶部添加:

<%@page expressionCodec="none" %>

如果要全局更改此默认值,可以设置application.yml

grails:
    views:
        gsp:
            codecs:
                expression: none
于 2019-12-10T19:10:32.490 回答