当前位置: 首页 > 知识库问答 >
问题:

如何更新特定的Grails域类属性?

龙隐水
2023-03-14

我正在尝试更新当前登录用户的密码。但它显示了零点异常。

配置文件控制器:

def doPasswordChange(){
    def response = authenticationService.getMember()
    if (!response) {
        flash.message = AppUtil.infoMessage(g.message(code: "invalid.entity"), false)
        redirect(controller: "profile", action: "changePassword")
    } else {
        response = profileService.doPasswordChange(response, params)
        if (!response.isSuccess) {
            flash.redirectParams = response.model
            flash.message = AppUtil.infoMessage(g.message(code: "password.not.change"), false)
            redirect(controller: "profile", action: "changePassword")
        } else {
            flash.message = AppUtil.infoMessage(g.message(code: "updated"))
            redirect(controller: "profile", action: "index")
        }
    }
} 

ProfileService:

def doPasswordChange(Member member, GrailsParameterMap params){
    params.password = params.password.encodeAsMD5()
    params.newPassword = params.newPassword.encodeAsMD5()
    params.confirmPassword = params.confirmPassword.encodeAsMD5()
    def response = AppUtil.saveResponse(false, member)
    if(member.password==params.password && params.confirmPassword==params.newPassword){
        member.password = params.newPassword     //this line is gives me  null point exception
        if(member.validate()){
            log.warn myDomainObj.errors.allErrors.join(' \n')
            member.save(flush: true, failOnError:true)
            response.isSuccess = true
        }
        else println("ok")
    }
    return response
}

给我这个错误:

2019-07-09 01:55:04.284错误---[nio-8080-exec-8]o.g.web.errors.GrailsExceptionResolver: NullPointerExcture发生时处理请求:[POST] /profile/doPasswordChange-参数:密码: abcdqrty newPassword: 12345确认密码: 12345登录:更改密码堆栈跟踪如下:

JAVA朗,反思一下。InvocationTargetException:在组织中为空。圣杯。果心DefaultGrailsControllerClass$ReflectionInvoker。在org上调用(DefaultGrailsControllerClass.java:211)。圣杯。果心DefaultGrailsControllerClass。在org上调用(DefaultGrailsControllerClass.java:188)。圣杯。网状物地图。mvc。UrlMappingsInfoHandlerAdapter。handle(urlmappingsinfohandleradopter.groovy:90)。springframework。网状物servlet。调度员服务。doDispatch(DispatcherServlet.java:967)位于org。springframework。网状物servlet。调度员服务。doService(DispatcherServlet.java:901)位于org。springframework。网状物servlet。FrameworkServlet。processRequest(FrameworkServlet.java:970)位于org。springframework。网状物servlet。FrameworkServlet。doPost(FrameworkServlet.java:872)位于org。springframework。网状物servlet。FrameworkServlet。服务(FrameworkServlet.java:846)位于org。springframework。靴子网状物滤器ApplicationContextHeaderFilter。doFilterInternal(ApplicationContextHeaderFilter.java:55)位于org。圣杯。网状物servlet。mvc。GrailsWebRequestFilter。doFilterInternal(GrailsWebRequestFilter.java:77)位于org。圣杯。网状物过滤器。HiddenHttpMethodFilter。java上的doFilterInternal(HiddenHttpMethodFilter.java:67)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1149)。util。同时发生的ThreadPoolExecutor$Worker。在java上运行(ThreadPoolExecutor.java:624)。朗。丝线。运行(Thread.java:748)的原因是:java。lang.NullPointerException:在组织中为空。圣杯。奥姆。冬眠支持ClosureEventTriggeringInterceptor。GetModifiedProperties with AutoTime Stamp(ClosureEventTriggeringInterceptor.java:206)位于org。圣杯。奥姆。冬眠支持ClosureEventTriggeringInterceptor。org上的synchronizeHibernateState(ClosureEventTriggeringInterceptor.java:188)。圣杯。奥姆。冬眠支持ClosureEventTriggeringInterceptor。org上的onPreUpdate(ClosureEventTriggeringInterceptor.java:249)。冬眠行动内部的EntityUpdateAction。org上的preUpdate(EntityUpdateAction.java:244)。冬眠行动内部的EntityUpdateAction。在org上执行(EntityUpdateAction.java:118)。冬眠发动机spi。动作队列。org上的executeActions(ActionQueue.java:589)。冬眠发动机spi。动作队列。org上的executeActions(ActionQueue.java:463)。冬眠事件内部的AbstractFlushingEventListener。performExecutions(AbstractFlushingEventListener.java:337)位于org。冬眠事件内部的DefaultFlushEventListener。org上的onFlush(DefaultFlushEventListener.java:39)。冬眠内部的SessionImpl。flush(SessionImpl.java:1295)位于org。圣杯。奥姆。冬眠AbstractHibernateGormInstanceApi。flushSession(AbstractHibernateGormInstanceApi.groovy:289)位于org。圣杯。奥姆。冬眠AbstractHibernateGormInstanceApi$_performSave_closure 3。doCall(AbstractHibernateOrminStanceAPI.groovy:254)位于org。圣杯。奥姆。冬眠GrailsHibernateTemplate。doExecute(GrailsHibernateTemplate.java:299)位于org。圣杯。奥姆。冬眠GrailsHibernateTemplate。在org上执行(grailshbernatetemplate.java:243)。圣杯。奥姆。冬眠GrailsHibernateTemplate。在org上执行(grailshbernatetemplate.java:117)。圣杯。奥姆。冬眠AbstractHibernateGormInstanceApi。performSave(AbstractHibernateGormInstanceApi.groovy:251)位于org。圣杯。奥姆。冬眠AbstractHibernateGormInstanceApi。在org上保存(AbstractHibernateGormistanceAPI.groovy:168)。圣杯。数据存储。戈姆。GormEntity$Trait$Helper。在com上保存(GormEntity.groovy:151)。桑托。比特吉祥物。档案服务。doPasswordChange(ProfileService.groovy:15)位于com。桑托。比特吉祥物。档案管理员。doPasswordChange(ProfileController.groovy:24)。。。省略14个公共框架

我尝试只为其他成员类属性分配一个新值。同样的错误。我该怎么解决呢?

共有1个答案

那安宁
2023-03-14

在形式中添加属性useToken="true"

<g:form  name="applyForm" useToken="true">
  //ur code
  </g:form>

将你的操作代码放入Form{}

withForm {
//ur origin code in action
}.invalidToken {
//what to do when token invalidate
        }
 类似资料:
  • 我有一个带有域类的Grails项目。这个持久类应该映射到JavaDTO。我在这里发现了一个非常旧的Grails插件,它并没有真正解决这个问题。 是否有一个插件或方法: 注释映射到相应DTO类的域类属性

  • 问题内容: 我一直在尝试更新特定行已有一段时间了,看来有两种方法可以做到这一点。根据我的阅读和尝试,你可以使用: 方法 或者: 方法。 (让我知道这是否不正确,因为我是android新手,还是SQL新手。) 因此,让我了解我的实际代码。 我正在努力做到这一点: 更新主键()等于1的Field1,Field2和Field3。 Eclipse在“更新”一词的正下方给了我一条红线,并给出了以下解释: S

  • 我正在尝试将Point添加到Grails 3.3.8(当前最新版本)中的域对象。Grails 3.3.8使用Hibernate 5.1.5,它支持hibernate空间。 在build.gradle: 在配置中: 在域中,PointTest.groovy: 从这篇关于堆栈溢出的文章中我可以看出,上面的内容应该是有效的。但是当我运行Grails项目时,表并没有被创建。如果从<code>映射</cod

  • 在,它表示可以向方法传递一个rect来更新部分屏幕。然而,我看到的所有示例都只是从程序中的图像或形状传递现有的rect。我如何告诉它直接更新屏幕上的某个区域?例如,在绘制矩形时,我可以使用rect参数。这将绘制一个矩形,顶部为200,左侧为100,宽度为30,高度为40。如何将类似的参数传递到?我尝试了,但这会更新整个窗口。

  • 找到了以下场景的部分答案,但需要进一步澄清。 有下列情况: 用java编写的域类 我想做的事情: 创建一个grails应用程序,它可以执行以下操作: 使用java域类作为grails域类 通过GORM将java域类映射到DB 能够从groovy域类创建java域类,以便能够将其发送到java服务器进行处理,然后接收java类响应并将其转换为groovy类,以便使用GORM存储在DB中映射 基本上有

  • 我正在创建一个SpringBoot/Angular 8应用程序,并在尝试更新解耦的前端/后端对象时遇到一些问题。当我发送包含角模型的json post请求时,'d或其他缺失的值将被更新为null,而不是被忽略。 这个堆栈溢出问题与此密切相关,推荐的解决方案确实有效,但它打断/绕过了一系列Jackson/Hibernate注释(例如和),所以,如果可能的话,我想寻找其他的解决方案:当使用json解析