这是grails中的SecUserSecRole类
import org.apache.commons.lang.builder.HashCodeBuilder
class SecUserSecRole implements Serializable {
SecUser secUser
SecRole secRole
static mapping = {
id composite: ['secUser', 'secRole'] <----- this
version false
}
boolean equals(other) {
if (!(other instanceof SecUserSecRole)) {
return false
}
other.secUser?.id == secUser?.id &&
other.secRole?.id == secRole?.id
}
int hashCode() {
def builder = new HashCodeBuilder()
if (secUser) builder.append(secUser.id)
if (secRole) builder.append(secRole.id)
builder.toHashCode()
}
static SecUserSecRole get(long secUserId, long secRoleId) {
find 'from SecUserSecRole where secUser.id=:secUserId and secRole.id=:secRoleId',
[secUserId: secUserId, secRoleId: secRoleId]
}
static SecUserSecRole create(SecUser secUser, SecRole secRole, boolean flush = false) {
new SecUserSecRole(secUser: secUser, secRole: secRole).save(flush: flush, insert: true)
}
static boolean remove(SecUser secUser, SecRole secRole, boolean flush = false) {
SecUserSecRole instance = SecUserSecRole.findBySecUserAndSecRole(secUser, secRole)
if (!instance) {
return false
}
instance.delete(flush: flush)
true
}
static void removeAll(SecUser secUser) {
executeUpdate 'DELETE FROM SecUserSecRole WHERE secUser=:secUser', [secUser: secUser]
}
static void removeAll(SecRole secRole) {
executeUpdate 'DELETE FROM SecUserSecRole WHERE secRole=:secRole', [secRole: secRole]
}
}
这是自动生成的 Controller :
class SecUserSecRoleController {
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
def index() {
redirect(action: "list", params: params)
}
def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[secUserSecRoleInstanceList: SecUserSecRole.list(params), secUserSecRoleInstanceTotal: SecUserSecRole.count()]
}
def create() {
[secUserSecRoleInstance: new SecUserSecRole(params)]
}
def save() {
def secUserSecRoleInstance = new SecUserSecRole(params)
if (!secUserSecRoleInstance.save(flush: true)) {
render(view: "create", model: [secUserSecRoleInstance: secUserSecRoleInstance])
return
}
flash.message = message(code: 'default.created.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), secUserSecRoleInstance.id])
redirect(action: "show", id: secUserSecRoleInstance.id)
}
def show(Long id) {
def secUserSecRoleInstance = SecUserSecRole.get(id)
if (!secUserSecRoleInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), id])
redirect(action: "list")
return
}
[secUserSecRoleInstance: secUserSecRoleInstance]
}
def edit(Long id) {
def secUserSecRoleInstance = SecUserSecRole.get(id)
if (!secUserSecRoleInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), id])
redirect(action: "list")
return
}
[secUserSecRoleInstance: secUserSecRoleInstance]
}
def update(Long id, Long version) {
def secUserSecRoleInstance = SecUserSecRole.get(id)
if (!secUserSecRoleInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), id])
redirect(action: "list")
return
}
if (version != null) {
if (secUserSecRoleInstance.version > version) {
secUserSecRoleInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: 'secUserSecRole.label', default: 'SecUserSecRole')] as Object[],
"Another user has updated this SecUserSecRole while you were editing")
render(view: "edit", model: [secUserSecRoleInstance: secUserSecRoleInstance])
return
}
}
secUserSecRoleInstance.properties = params
if (!secUserSecRoleInstance.save(flush: true)) {
render(view: "edit", model: [secUserSecRoleInstance: secUserSecRoleInstance])
return
}
flash.message = message(code: 'default.updated.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), secUserSecRoleInstance.id])
redirect(action: "show", id: secUserSecRoleInstance.id)
}
def delete(Long id) {
def secUserSecRoleInstance = SecUserSecRole.get(id)
if (!secUserSecRoleInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), id])
redirect(action: "list")
return
}
try {
secUserSecRoleInstance.delete(flush: true)
flash.message = message(code: 'default.deleted.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), id])
redirect(action: "list")
}
catch (DataIntegrityViolationException e) {
flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), id])
redirect(action: "show", id: id)
}
}
}
这意味着 show(Long id)
edit(Long id)
update(Long id, Long version)
和 delete (长 ID)
不起作用。既然id是复合的,那么如何在 Controller 中获取它呢?
我很确定我错过了一些明显的东西,而且这是一个简单的修复,所以如果有人能指出我正确的方向,我将不胜感激!我仍在学习如何编码。提前致谢
最佳答案
再次:),这个域类是由 spring-security-plugin 生成的,它的使用不是直接暴露给 web 的。通常,grails 脚手架不会应用于此域类,而仅应用于用户和角色域类,并进行一些更正。如果您需要管理角色、用户以及用户和角色之间的关系,您可以使用 spring-security-ui-plugin。有了这个插件,你就有了一组 View / Controller 来帮助你管理 spring-secuirity-plugin。至少如果您想创建个人网络界面,而该插件是开源的,您可以看到该插件中使用的 Controller 是如何工作的。再见
关于java - Grails和Spring Security如何在 Controller 中获取复合ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21302618/