gpt4 book ai didi

grails - 评估 GSP 标签内的表达式

转载 作者:行者123 更新时间:2023-12-02 15:00:48 24 4
gpt4 key购买 nike

我正在尝试评估 GSP 标记中的表达式。粗略地说,

<g:form ${true ? 'name=\"hello\"' : ''}>

但我得到的错误是:
Class: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException
Message: Attribute value must be quoted (${true ? 'name=\"hello\"' : ''}).

在其他 View 之一中,以下表达式(与上述表达式类似)可以正常工作。
<li ${controllerName == null ? ' class=active' : ''}>

但它不适用于表单标签。我正在使用 Grails 2.3.5。知道我做错了什么吗?

编辑:这个表达式我也有类似的问题。
<g:form url="[${multiple ? '' : 'resource:xyzInstance, '}action:'update']" method="PUT" >

在这里, multiple是一个 bool 值。它适用于 <g:if>标签。
<g:if test="${multiple}">

最佳答案

在 Groovy 中,不能在单引号字符串中转义双引号。
相反的情况也适用:单引号不能在双引号字符串中转义(顺便说一下,称为 GStrings)

尝试

<g:form ${true ? 'name="hello"' : ''}>

或者
<g:form ${true ? "name=\"hello\"" : ''}>

两者都会起作用。

对于更新问题的第二部分,我建议单独构建 map ,因为它不仅可以工作,而且您的代码将更易于阅读和维护。就像是:
<%
def urlMap = [action: 'update']
if(multiple)
urlMap.put 'resource', 'xyzInstance'
%>
<g:form url="${urlMap}" method="PUT">

还要小心您用作某些属性值的类型,这有时会给我带来一些麻烦:
  • '一个字符串'
  • “带有 ${dynamicValue} 的 GString”
  • “[一个看起来像列表的 GString]”
  • "${[a, list]}"
  • "${[a: map ]}"
  • "false"<- 这将始终被评估为 true,因为它是一个非空非空 GString
  • "${false}"<- 上一行问题的解决方法

  • 我希望这一切都能解决你的问题。为了简单起见,我总是建议保持值表达式尽可能简单,如果他们需要复杂的逻辑,请将其放在标签之前的一个 block 中,它将从中受益。

    关于grails - 评估 GSP 标签内的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23684308/

    24 4 0