grails - GSP页面中的三元运算符产生错误

标签 grails grails-4

我目前正在升级到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语句之外,谁能推荐解决方案?

这是显示内容的屏幕截图。

image of output displayed

最佳答案

而不是不识别三元运算符,您有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/

相关文章:

grails - Grails-如何访问域类中的配置值?

grails - 在GANT中使用xmlProperty任务

spring-boot - 将War文件部署到Heroku时,Grails出错(工厂方法 'requestMappingHandlerAdapter'引发异常)

tomcat - Grails 4.0.3缓存插件-clearAtStratup不起作用

grails - 在Grails中将Cookie httpOnly设置为false。

grails - Grails 4.0.2。无法在名称为 'index'的servlet中解析名称为 'grailsDispatcherServlet'的 View

spring-boot - 如何在Grails 4集成测试中禁用Spring Security?

grails - Grails 渲染插件的空指针异常

azure - 如何保护将Azure与Oauth结合使用的Grails API?

angularjs - 使用Grails和Spring Security进行后端时的 Angular 前端身份验证