我目前正在升级到Grails4。在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语句之外,谁能推荐解决方案?
这是显示内容的屏幕截图。
最佳答案
而不是不识别三元运算符,您有HTML显示为字符串而不是呈现的问题。这是因为默认情况下,GSP表达式(在${}
内)被编码为HTML。
要处理这种情况,请将您的表达式包装在 raw()
method中:
<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>
如果要更改entire page的此行为,可以将其添加到GSP的顶部:
<%@page expressionCodec="none" %>
如果要更改此default globally,可以在
application.yml
中进行设置:grails:
views:
gsp:
codecs:
expression: none
关于grails - GSP页面中的三元运算符产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59273512/