2015-12-22 11 views
0

嗨,我是Grails新手& Groovy。如何在请求为“GET”时通过Grails命令对象验证?

目前,我的主页上有一个“注册”按钮,当它连接到一个控制“用户”和动作“注册”时。

我有用户/注册的gsp视图。

在我的注册行动中,我使用命令对象来做一些验证。 (如密码和确认密码检查)。

这里的问题是:

当我点击从我主页上的注册按钮,我想它,然后发送“GET”请求“用户/注册”。

<g:link controller="user" action="register"> 
    <input type="button" class="btn btn-default btn-sm" value="Join Free"/> 
</g:link> 

在我的用户控制器我有这样的:

def register(UserRegistrationCommand urc) { 
    if (urc.hasErrors()) { 
    render view: "register", model: [ user : urc ] 
    } else { 
    def user = new User(urc.properties) 
    user.profile = new Profile(urc.properties) 
    if (user.validate() && user.save()) { 
    flash.message = 
    "Welcome aboard, ${urc.fullName ?: urc.loginId}" 
    redirect(uri: '/') 
    } else { 
    // maybe not unique loginId? 
    return [ user : urc ] 
    } 
    } 
    } 

那么这将触发逻辑在我的寄存器控制器,这是命令对象的验证。然而,当我点击主页上的按钮后,它正在抱怨一些像passowrd等字段。但我认为它应该首先到/user/register.gsp?那我可以输入注册信息了吗?

+0

只是想知道为什么你使用“GET”而不是“POST”? – emilan

+0

@emilan感谢您的回复,我只是重新编辑这个问题,希望对您有帮助吗? – SF461

+0

而不是''使用''或者只是一个'button'来提交表单。我不认为在URL中发送密码是一个好主意(GET)。 – emilan

回答

1

首先:使用POST请求进行注册。

其次,使用与您的注册数据相符的CO。手段不使用注册时不需要的额外属性。或者修改你的约束。

如果调用验证方法或保存期间,则会发生验证。您可以通过调用save(validation: false)来绕过验证,但不应该这样做。

+0

感谢您的回复。我想我迷惑了你。我的问题是,我有一个链接从我的主页上的“注册”按钮带我到注册控制器。但是,从我的主页单击它后,它并未首先显示register.gsp视图。相反,它抱怨字段密码为空...等。我假设,当我点击我主页上的注册按钮时,它会向用户/注册控制器发送“GET”方法?然后以某种方式,同时触发对象验证。因此,我没有看到网页但验证错误 – SF461

+0

您应该使用两种不同的操作。第一个用于仅注册gsp页面,第二个用于在用户填充数据后提交数据 –

+0

这就是我在想的......上帝我遵循这些书籍(GrailsInAction),但它们都像例子I粘贴在这里。他们怎么会工作呢......再次感谢! – SF461