0

我正在尝试向视图呈现一些错误,但这些错误仅出现在第二次提交中。

//Controller Method
def submitUserInfo = { UserDetailsCommand command ->



    if(!session.upgradeActive) {
        return upgradeProcessEnded();
    }

    User user = springSecurityService.currentUser;

    if(!user.userDetails) {

        user.userDetails = new UserDetails(params);

        user.userDetails.user = user;
    }
    else {

        user.userDetails.properties = params;
    }

    if (!command.hasErrors()) {

        if (!params.firstName)
        {
            user.userDetails.errors.rejectValue('firstName',message(code: 'base.subscription.errors.generalOutput', args: [message(code: 'base.user.firstName.label')]))
        }
        if (!params.lastName)
        {
            user.userDetails.errors.rejectValue('lastName',message(code: 'base.subscription.errors.generalOutput', args: [message(code: 'base.user.lastName.label')]))
        }

        // Internal Server Error Code
        response.status = 400
        return render (view: 'userInfo', model: [userInstance: user])
    }
    ...
}

//Class
@Validateable
class UserDetailsCommand {

    // Properties
    String firstName
    String lastName
    String phoneNumber

    //Company
    String companyName
    String companyPhoneNumber
    String address
    String postalCode
    String country
    String city
    String state

    static constraints = {
        firstName nullable: false
        lastName nullable: false
        address nullable: false
        postalCode nullable: false
        country nullable: false
        city nullable: false
        state nullable: false
        companyName nullable: false
    }
}

//View
<g:if test='${flash.message}'>
        <div class="control-group primary-background">
            <div class='alert alert-error'>
                <i class="icon-exclamation-sign"></i>
                ${flash.message}
            </div>
        </div>
        <%-- Clear messages to prevent showing on refresh --%>
        ${flash.clear()}
    </g:if>
<g:hasErrors bean="${userInstance.userDetails}">
<div class="control-group primary-background">
    <p class="alert alert-error">
        <g:each var="error" in="${userInstance.userDetails.errors.allErrors}">
            <i class="icon-exclamation-sign"></i>
            <g:message error="${error}" />
            <br />
        </g:each>
    </p>
</div>
</g:hasErrors>

<div class="flex_column one_half first">

<g:hiddenField name="id" value="${ userInstance?.id }"/>

<h3><g:message code="base.user.details.title" /></h3>   

<strong><g:message code="base.user.email.label" />: </strong>
${fieldValue(bean: userInstance, field: "username")}

<label for="firstName"><g:message code="base.user.firstName.label" /></label>
<g:textField name="firstName" value="${fieldValue(bean: userInstance.userDetails, field: "firstName")}"/>

<label for="lastName"><g:message code="base.user.lastName.label" /></label>
<g:textField name="lastName" value="${fieldValue(bean: userInstance.userDetails, field: "lastName")}"/>
...

好吧,在第一次提交中没有出现错误,然后显示错误。当我更改验证规则时,空白字段,情况再次重复。如果第一次提交中的字段为空白,则在第二次提交后不会出现错误。有什么建议吗?

4

1 回答 1

1

您只显示代码块if (!command.hasErrors()) {

如果您提交一个空白firstNamelastName,它应该有错误。

如果没有,您是否应该使用blank: false而不是nullable: false作为您的验证器,firstNamelastName不是尝试推出您自己的验证?

于 2012-10-19T23:01:48.383 回答