gpt4 book ai didi

grails - 变量在 GSP 标签中不起作用,但在普通文本中起作用

转载 作者:行者123 更新时间:2023-12-01 10:10:12 24 4
gpt4 key购买 nike

我想为登录用户提供使用快速链接编辑其用户帐户的可能性。

为此,我使用正确的 GSP 标签创建了一个链接,我想使用正确的帮助程序从 Spring Security UserDetails 对象传递用户 ID。

问题是,当我在 GSP 标签中时,就像在编辑我的用户之后,但不是在我真正需要它的地方,在 id 属性中。

<g:link controller="user" action="show" id="${sec.loggedInUserInfo(field: "id")}">
Edit my User ${sec.loggedInUserInfo(field: "id")}
</g:link>

预期:

<a href="/Backoffice/user/show/1"> Edit my User 1 </a>

错误的结果:

<a href="/Backoffice/user/show"> Edit my User 1 </a>

安全标签库正在访问的 UserDetails 类在这里:

   import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser
import org.springframework.security.core.GrantedAuthority

class UserDetails extends GrailsUser {
final String displayName
final String email
final String gravatarImage

...

id 在 GrailsUser 基类中被定义为对象。

类 GrailsUser 扩展用户 {

private final Object _id

...

并将在此处编码为 HTML:

/**
* Renders a property (specified by the 'field' attribute) from the principal.
*
* @attr field REQUIRED the field name
*/
def loggedInUserInfo = { attrs, body ->

// TODO support 'var' and 'scope' and set the result instead of writing it

String field = assertAttribute('field', attrs, 'loggedInUserInfo')

def source
if (springSecurityService.isLoggedIn()) {
source = determineSource()
for (pathElement in field.split('\\.')) {
source = source."$pathElement"
if (source == null) {
break
}
}
}

if (source) {
out << source.encodeAsHTML()
}
else {
out << body()
}
}

有趣的是:这行得通。但我真的很想对链接使用一致的 gsp 语法,我想了解为什么贴在上面的代码不起作用。

<a href="${createLink( controller : "user", action : "show", id : sec.loggedInUserInfo(field: "id"))}">Edit my User</a>

最佳答案

看起来像是错误的引用 - 您需要在 id="..." 中转义 "。为简单起见,请尝试使用 field: ' id' 而不是 field: "id"

关于grails - 变量在 GSP 标签中不起作用,但在普通文本中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831376/

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