我的gsp页面都是应用main.gsp的布局。 Main.gsp使用引导布局和容器来使页面响应。在我网站上的一些页面中,我正在尝试使用液体布局,并且不希望容器包装每个子页面中的所有内容。
有没有办法在应用main.gsp布局的页面中传递变量或设置某些内容,并在主布局中执行条件代码?
以下这些尝试均未奏效。在一个我在子页面中设置一个变量,在另一个尝试我传入模型中的变量。在这两种情况下,容器都在profile.gsp中呈现。
main.gsp:
<body>
<g:if test="${fluid != true}">
<div class="container">
</g:if>
...
profile.gsp:
<g:set var="fluid" value="true"/>
<g:applyLayout name="main" model="[fluid:'true']">
<html>
<head>
...
答案 0 :(得分:2)
您将字符串值设置为var fluid in:
<g:set var="fluid" value="true"/>
如果<g:if test="${fluid != true}">
它正在检查布尔值而不是字符串比较,那么你需要定义一个布尔值,或者你需要检查sstring比较。
要设置布尔值,您可以执行<g:set var="fluid" value="${true}"/>
因为"true"
将使它只是一个值为true而不是布尔值为true的字符串。
答案 1 :(得分:0)
除了Sachin Vermas的回复之外,您还可以使用另外两种方法:
不是一个干净的解决方案,但它应该有效:在布局中,有params-map和会话可用,所以你可以将你的旗帜存储在其中一个对象中。
另一个解决方案是不仅要对布局进行条件检查,还要使用全新的布局:
'<g:applyLayout name="${fluid?'fluid':'main'" >'
但是由于Sachin Verma已经回复,fluid
变量必须是正确的类型。据我所知,在你的情况下你甚至不需要动态切换两个布局,但你可以只使用`
<g:applyLayout name="fluid" >`
表示你的流体页面和`
<g:applyLayout name="main" >`
否则。这样可以使您的代码更加清晰,以防您不仅需要隐藏div。