[英]Grails <g:select> woes
我正在使用Spring 安全插件。 默认情况下,这个插件在我的项目中创建了三个类。
org.me.example.UserRole.UserRole
org.me.example.UserRole.User
org.me.example.UserRole.Role
User
和Role
类彼此不知道,但UserRole
class 同时具有User
和Role
object。 Role
object 只有一个属性,一个名为authority
的字符串。
我的目标是在<g:select>
语句中获得所有具有一定authority
的Users
。
这是我的尝试之一:
<g:select name="loggedBy.id" from="${org.me.example.UserRole.UserRole.list(fetch:[(role.authority):"ROLE_ADMIN"])}" optionKey="id" value="" />
我确实意识到这将返回一个UserRole
列表而不是一个User
列表。 无论如何“加入”我的课程,以便我可以检索我想要的数据? 寻找最干净的解决方案。
更新:
我认为我的课程看起来有些混乱,所以这里是精简版。
class UserRole {
User user
Role role
//more stuff
}
class Role {
String authority
//more stuff
}
class User {
//lots of stuff, but nothing that links back to the Role class or the UserRole class
}
经过一些改动后,克鲁多夫的回答对我有用。 Crudof 指出 package 名称UserRole
不遵循 Java package 命名约定。 这是真的,但如果我没记错的话,Spring 安全核心插件会自动创建 package 和其中的类,所以我没有弄乱这个名字......但自从我这样做已经有一段时间了,所以我可以误认为它自动命名为 package。
<g:set var="desiredRole" value='${org.me.example.UserRole.Role.findByAuthority("ROLE_ADMIN")}' />
<g:select name="loggedBy.id" from="${org.me.example.UserRole.UserRole.findAllByRole(desiredRole).user}" optionKey="id" value="" />
最好在 controller 中执行此操作:
def usersWithAdminRole = UserRole.withCriteria {
eq("role", Role.findByAuthority('ROLE_ADMIN'))
}.collect {
it.user
}
<g:select from="${usersWithAdminRole}" name="loggedBy.id" optionKey="id" />
UserRole
是嵌套的 class 的UserRole
)。基本上你的代码片段很好(概念上)。 请注意,您不能在双引号属性值中使用双引号。 我认为这阻止了您的进步:您可以尝试以下方法:
<g:set var="desiredRole" value='${org.me.example.UserRole.findByAuthority("ROLE_ADMIN")}' /> <g:select name="userSelect" from="${org.me.example.UserRole.findAllByRole(desiredRole).user}" />
请注意,从 UserRole-instances 访问用户实例是一种常规操作。 有关一些示例,请参阅http://groovy.codehaus.org/Collections 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.