Grails如果声明不起作用?

时间:2013-07-08 14:45:00

标签: grails if-statement view

我目前正在尝试在Grails应用程序中的视图上实现嵌套的if语句。我有下面的代码,首先检查一个值是否为真,如果是,它呈现一些代码(这是有效的)。然后,如果这不是真的,它将落入else语句,在这里我需要一个嵌套的If语句来查看一个值并根据该值呈现不同的代码片段。

<g:if test="${a?.staticValue == true}">
    <g:field type="text" name="staticText" readonly="true" value="${a?.data}"/>
</g:if>
<g:else>
    <g:if test="${a?.type == 'Door'}">
        <g:field type="text" name="doorField" value="" placeholder="${a?.wood}"/>
    </g:if>
    <g:elseif test="${a?.type == 'Floor'}">
        <g:field type="text" name="floorField" value="" placeholder="${a?.laminate}"/>
    </g:elseif>
    <g:elseif test="${a?.type == 'Window'}">
        <g:field type="text" name="windowField" value="" placeholder="${a?.blinds}"/>
    </g:elseif>
</g:else>

在else语句中没有呈现任何内容,只显示第一个框,因此嵌套的if语句由于某种原因不起作用,我不明白为什么。如果我删除底部的if语句并运行下面的代码显示“Door”。

<g:field type="text" name="typeField" value="" placeholder="${a?.type}"/>

我不明白为什么这不起作用,我可能会遗漏一些愚蠢的东西,但我真的很感激这方面的帮助。

提前致谢


*** 修改 * ** *


所以我已按照下面的建议更改了我的代码以修剪任何空格,即使不应该有任何空格,我也会遇到一个奇怪的错误:

<g:if test="${a?.type.trim().equals('Door')}">

以下错误似乎表明没有数据被提取:

No signature of method: com.smstool.Dynam$VarType.trim() is applicable for argument types: () values: []

这很奇怪,因为我已将此else语句添加到结尾,并将“Door”的值返回到视图:

<g:else>
     ${a?.type}
</g:else>

有没有人有任何想法,因为我很困惑:S谢谢

1 个答案:

答案 0 :(得分:0)

尝试:如果?.staticValue是String尝试旧的java方式:

 <g:if test="${a?.staticValue}">
        <g:field type="text" name="staticText" readonly="true" value="${a?.data}"/>
    </g:if>
    <g:else>

    <g:if test="${a?.type.toString().equals('Door')}">
        <g:field type="text" name="doorField" value="" placeholder="${a?.wood}"/>
    </g:if>
    <g:elseif test="${a?.type.equals('Floor')}">
        <g:field type="text" name="floorField" value="" placeholder="${a?.laminate}"/>
    </g:elseif>
    <g:elseif test="${a?.type.equals('Window')}">
        <g:field type="text" name="windowField" value="" placeholder="${a?.blinds}"/>
    </g:elseif>
    </g:else>

表示不区分大小写:

等于可以更改为: equalsIgnoreCase