gpt4 book ai didi

grails - Grails:以main.gsp布局访问模型

转载 作者:行者123 更新时间:2023-12-02 13:50:08 25 4
gpt4 key购买 nike

我需要访问main.gsp布局中的特定模型。我四处搜索并了解到,实现此目的的最佳方法是创建一个after过滤器,并将模型应用于viewModel参数,然后像下面这样在gsp中访问它:

class MyFilters {
all(controller:'*', action:'*') {
after = {viewModel ->
viewModel.client = Client.get(session.clientId)
// println "Client is: ${client.toString()}"
}
}
}

在我的GSP中,我应该获得“客户端”并能够访问它?
<g:if test="${client.isPartner()}">
Do something
</g:if>
<g:else>
Do something else
</g:else>

我要尝试执行的一个示例是包括GSP模板,并根据登录的当前客户端是否属于伙伴来包含特定的CSS样式表。特殊CSS和GSP模板的位置取决于合作伙伴的名称,例如:
<g:if test="${client.isPartner()}">
<link rel="stylesheet" type="text/css" href="/partners/${client.getPartner().toString()}/css/style.css"/>
</g:if>
<g:else>
<link rel="stylesheet" type="text/css" href="/partners/default/css/style.css"/>
</g:else>

这也可以使用GSP模板来完成...但是,每当执行此操作时,都会出现以下异常:
ERROR grails.web.pages.GroovyPagesServlet  - Original exception : Cannot invoke method isPartner() on null object

因此,显然,“客户”在GSP中为空。如果我在上面显示的after过滤器中取消注释println,则此时它不为null,并且将打印客户端名称。我在这里做错什么了吗?有没有更好的方法来获取main.gsp内部的模型?

最佳答案

这看起来像是我最近回答的一个问题的副本。我建议使用标签库解决此问题:

How do I (or should I?) access the service layer from a SiteMesh template (views/layouts/main.gsp) in Grails?

您可以在标签库中访问该 session ,因此像这样的闭包应该起作用:

...
static namespace = "yournamespace"
...
def partnerDetails = { attrs, body ->
def client = Client.get(session.clientId)
if (client.isPartner()) {
out << "Whatever you want to write out..."
// You can also call other tag libs from here - see docs
}
}
...

然后,您可以在gsp中使用标记,如下所示:
<yournamespace:partnerDetails />

您也可以传入属性,如果有帮助的话,这些属性会通过 attrs映射传递到闭包中。

最后,如果您想有条件地呈现标记的主体,则可以这样进行:
...
if (client.isPartner()) {
out << body()
}
....

您会这​​样称呼它:
<yournamespace:partnerDetails>
This is the body content that will be output in the body() call above.
</yournamespace:partnerDetails>

关于grails - Grails:以main.gsp布局访问模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com