java - Spring security 无法将属性 'secRole' 的类型 [java.lang.String] 的值转换为所需类型 [SecRole]

标签 java grails spring-security

当我用不同的角色更新用户时,出现这两个错误:

无法将属性“secUser”的类型 [java.lang.String] 的值转换为所需类型 [rms.SecUser]:未找到匹配的编辑器或转换策略]

无法将属性“secRole”的类型 [java.lang.String] 的值转换为所需类型 [rms.SecRole]:未找到匹配的编辑器或转换策略]

我正在使用 grails spring 安全插件。

这是我的 Controller :

def updateSecUserSecRole(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: "listSecUserSecRole")
        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")
            redirect(action: "listSecUserSecRole")
            return
        }
    }

    secUserSecRoleInstance.properties = params

    if (!secUserSecRoleInstance.save(flush: true)) {
        secUserSecRoleInstance.errors.allErrors.each{
            println  it
        } 

        redirect(action: "listSecUserSecRole")
        return
    }

    flash.message = message(code: 'default.updated.message', args: [message(code: 'secUserSecRole.label', default: 'SecUserSecRole'), secUserSecRoleInstance.id])
    redirect(action: "listSecUserSecRole")
}

这是编辑 gsp 中我的表单字段的片段:

<g:select class="select2-edit" style="width:30% !important;" id="secUser.id" name="secUser" from="${rms.SecUser.list()}" optionKey="id" optionValue="username" required="" value="${secUserSecRoleInstance?.secUser?.id}" />

<g:select id="secRole.id" name="secRole" from="${rms.SecRole.list()}" optionKey="id" optionValue="authority" required="" value="${secUserSecRoleInstance?.secRole?.id}" />

最佳答案

我怀疑,在你的表单中,名称应该与 ID 匹配。所以,

 id="secUser.id" name="secUser.id" 
 id="secRole.id" name="secRole.id"

更具体地说,表单是使用 name 值而不是 id 提交的

关于java - Spring security 无法将属性 'secRole' 的类型 [java.lang.String] 的值转换为所需类型 [SecRole],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978788/

相关文章:

java - Spring Security抛出未经授权的异常而不是重定向到登录

使用用户名或电子邮件的Spring Security

服务中的 Grails jms 和 Atmosphere 插件 null springSecurityService 注入(inject)

java - 更新 JFrame 中文本的按钮

maven-2 - 如何在 IDE 中使用 Grails 依赖项

java - 需要 Java 兼容的 GIS 库/数据

oracle - Grails-使用VARCHAR2字段作为表标识符-外键关系失败

Grails GORM 继承改变判别器列

java - 在 JDK 7 中默认启用 TLSv1.2

java - 无法连接到 smtp.gmail.com