【发布时间】:2019-01-17 01:03:11
【问题描述】:
我不知道以下更改是有问题还是有意为之。
<g:include view="line.gsp" params="['label':'test', 'progress':false]"/>
那么 line.gsp aways 中的表达式计算结果为 true,因为 'progress' 参数的类型是字符串,而不是布尔值。
class is: ${params.progress.getClass()}
<g:if test="${params.progress}">
this should not be displayed
</g:if>
请注意,这同样适用于其他类型,而不仅仅是布尔值。 我正在使用 grails 3.3.8 这在 grails 2.5.2 中没有发生。
我在网上没有找到任何关于此的信息,所以我在这里问。谢谢。
编辑:
正如 Daniel 所建议的,我也尝试过使用 grails 3.3.2。 我刚刚使用 grails create-app 创建了一个应用,并修改了现有的 index.gsp 以包含 line.gsp,如上面的代码所示。
【问题讨论】:
-
这至少在 grails 3.3.2 中按预期工作。我刚刚测试了您的确切示例,
${params.progress.getClass()}是布尔值,它在 if 块中正确评估。也许还有其他事情发生?您是否已经将progress参数传递到父视图中? -
嗯,我试过 3.3.8、3.0.0 和 grails 2.5.2。我使用 grails create-app 从头开始创建应用程序。我刚刚创建了一个包含问题代码的简单 line.gsp 文件,然后修改了现有的 index.gsp 文件以包含 line.gsp 文件。我没有做任何其他改变。很奇怪。
-
如果在 line.gsp 中输出
${params.progress}会发生什么?还是${params.progress.getClass()}? -
grails 2 和 3 都显示为 true,但 grails 3 显示 java.lang.String() 而 grails 2 显示 java.lang.Boolean。这就是我注意到进度被解释为字符串的原因,因为最初我在 gsp 中有一个不同的错误,实际上是由这个错误引起的。我也会尝试使用 grails 3.3.2。谢谢。
-
@Daniel 我也尝试过使用 grails 3.3.2,即使在不同的系统上,我也得到了相同的结果。我用截图编辑了我的问题。
标签: grails grails-3.3.x