条件检查grails网站网格

时间:2014-01-02 22:50:11

标签: grails sitemesh

我的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>
...

2 个答案:

答案 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的回复之外,您还可以使用另外两种方法:

  1. 不是一个干净的解决方案,但它应该有效:在布局中,有params-map和会话可用,所以你可以将你的旗帜存储在其中一个对象中。

  2. 另一个解决方案是不仅要对布局进行条件检查,还要使用全新的布局:

    '<g:applyLayout name="${fluid?'fluid':'main'" >'
    
  3. 但是由于Sachin Verma已经回复,fluid变量必须是正确的类型。据我所知,在你的情况下你甚至不需要动态切换两个布局,但你可以只使用`

    <g:applyLayout name="fluid" >`
    

    表示你的流体页面和`

    <g:applyLayout name="main" >` 
    

    否则。这样可以使您的代码更加清晰,以防您不仅需要隐藏div。