0

我目前正在尝试在我的 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 语句并运行值下方的代码,则显示“门”。

<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 语句,这会将“门”的值返回给视图:

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

有没有人知道这里可能发生了什么,因为我很困惑:S 谢谢

4

1 回答 1

0

尝试:如果 a?.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

于 2013-07-08T15:38:17.723 回答