【发布时间】:2014-02-13 16:09:20
【问题描述】:
这是 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]
}
}
这是自动生成的控制器:
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(Long id) 将不起作用。既然id是复合的,那么如何在controller中获取呢?
我很确定我遗漏了一些明显的东西,这是一个简单的修复,所以如果有人能指出我正确的方向,我将不胜感激!我还在学习如何编码。提前致谢
【问题讨论】:
标签: java grails spring-security