0

ビューにいくつかのエラーをレンダリングしようとしていますが、エラーは2回目の送信でのみ表示されます。

//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")}"/>
...

さて、最初の送信ではエラーは表示されず、その後はエラーが表示されます。検証ルール、空白のフィールドを変更すると、ケースが再び繰り返されます。最初の送信でフィールドが空白の場合、2番目の送信後にエラーは表示されません。なにか提案を?

4

1 に答える 1

1

のコードブロックのみを表示していますif (!command.hasErrors()) {

空白firstNameまたはを送信すると、エラーが発生lastNameするはずです。

そうでない場合は、検証ツールとしてではなく、独自の検証を実行する代わりに使用する必要がありますかblank: falsenullable: falsefirstNamelastName

于 2012-10-19T23:01:48.383 に答える