我正在尝试评估GSP标记中的表达式。粗暴地说,
<g:form ${true ? 'name=\"hello\"' : ''}>
但我得到的错误是:
Class: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException
Message: Attribute value must be quoted (${true ? 'name=\"hello\"' : ''}).
在其他一个视图中,以下表达式(与上面的表达式类似)可以正常工作。
<li ${controllerName == null ? ' class=active' : ''}>
但它不适用于表单标记。我正在使用Grails 2.3.5。知道我做错了吗?
编辑:我也有类似的问题。
<g:form url="[${multiple ? '' : 'resource:xyzInstance, '}action:'update']" method="PUT" >
这里,multiple
是一个布尔值。它适用于<g:if>
标记。
<g:if test="${multiple}">
答案 0 :(得分:2)
在Groovy中,双引号不得在单引号字符串中进行转义。 相反的情况也适用:单引号不得在双引号字符串中转义(顺便说一句称为GStrings)
尝试
<g:form ${true ? 'name="hello"' : ''}>
或
<g:form ${true ? "name=\"hello\"" : ''}>
两者都有效。
对于更新问题的第二部分,我建议单独构建地图,因为它不仅会起作用,而且您的代码将更易于阅读和维护。类似的东西:
<%
def urlMap = [action: 'update']
if(multiple)
urlMap.put 'resource', 'xyzInstance'
%>
<g:form url="${urlMap}" method="PUT">
在使用某些属性作为值的类型时要小心,这有时会给我带来一些麻烦:
我希望这一切能解决你的问题。为了简单起见,我总是建议保持值表达式尽可能简单,如果它们需要复杂的逻辑,请将它放在标签之前的块中,它将从中受益。
答案 1 :(得分:1)
我想这不是真正的表达方式
<g:form ${true ? 'name=\"hello\"' : ''}>
因为没有必要为此使用表达式,因为它等同于:
<g:form name="hello">
我想你需要的是像
<g:form name="${someVariable ? 'hello' : ''}">
如果这没有帮助,你能否更新你的问题以显示真实的表达?