在Grails的改变对照组的Twitter的引导验证状态(Changing twitter boot

2019-10-18 17:59发布

所以我有一个形式的GSP,我试图验证表单字段时使用Twitter验证状态。 我使用的用于验证的Grails的命令对象。 的问题是,Grails提供一种方法来添加“错误”级到对照组,如果从命令对象的字段具有使用“$ {hasErrors(豆:validationCommand,字段:‘开始’,‘错误’)}”的错误。 这样就产生了错误的标签,如果字段“开始”有验证错误。 这工作得很好,到一个点。 所以一开始场变为红色验证错误。 但我想它在验证成功变绿也! 这是不会发生。

所以,这里是开始表单字段:

 <div 
class="control-group ${hasErrors(bean:validationCommand, field:'start', 'error')}">
                    <label class="control-label" for="start">Starting Tag</label>
                    <div class="controls">
                        <g:textField name="start"
                            value="${fieldValue(bean:validationCommand,field:'start')}"
                            class="input-medium " />
                        <g:hasErrors bean="${validationCommand}" field="start">
                            <ul>
                                <span class="help-inline"> <g:renderErrors
                                        bean="${validationCommand}" field="start" as="list" />
                                </span>
                            </ul>
                        </g:hasErrors>
                    </div>
                </div>

我能想到的设置此功能的方法之一是使用测试,看看现场有错误,并设置变量(比如将startState)成功或错误,然后使用$ {}将startState类股利。

<g:if test="${ hasErrors(bean:validationCommand, field:'start') }">
                    <g:set var="startState" value="error"/>
                </g:if>
                <g:else>
                    <g:set var="startState" value="success"/>
                </g:else>
                </g:if>
                <div
                    class="control-group ${startState}">
                    <--same gsp as above-->

这里做的事情是,它的领域是从一开始(甚至在文本字段中输入任何内容)的绿色,然后在错误变成红色,或保持绿色。

我最后一次尝试,使这项工作牵涉的其他测试是否实地看是否使用设置

<g:if test="${fieldValue(bean:validationCommand,field:'start') != null }">

这并不影响从第二次尝试的结果。

所以,问题是,我怎么能动态成功类添加到基于输入字段的验证div标签。

编辑:

所述控制器被显示如下:

class ValidationController {

def index() {
}

def validate(ValidationCommand cmd) {
    if (cmd.hasErrors()) {
        render view: 'index', model: [validationCommand: cmd]
    } else {
        try {
            SourceLocation repo = SourceLocation.findById(cmd.repo)
            def parentJira = cmd.issueService.findIssue(cmd.jira)

            Collection<IssueViewModel> issues = cmd.issueService.listIssuesForParent(cmd.jira)
            Collection<SourceCommitViewModel> commits = cmd.sourceRepositoryService.listCommits(repo.project, repo.slug, cmd.start, cmd.end)

            def (valid, missing_linked_issues, missing_mentioned_issues, bad_commits, issues_with_filtered_commits) = cmd.validationService.validate(repo, issues, commits)
            [ParentJira: parentJira, Valid: valid, Commits: commits, Issues: issues, LinkedMissing: missing_linked_issues, MentionedMissing: missing_mentioned_issues, BadCommits: bad_commits, SourceCommitValidation: issues_with_filtered_commits]
        } catch (e) {
            log.error( "Validation Controller Error", e )
            flash.message = "validation.service.failed"
            flash.args = [e.message]
            flash.default = "Validation Service failed"
            redirect action: 'index', params: params
        }
    }
}
}

命令对象是:

class ValidationCommand {

def validationService
def sourceRepositoryService
def issueService

String jira
String repo
String start
String end

static constraints = {
    jira blank: false, nullable: false, matches: "[a-zA-Z]+-[0-9]+", validator: existsIssueAndIsARelease
    repo blank: false, nullable: false, validator: { val, obj -> SourceLocation.findById(val) != null }
    start blank: false, nullable: false, validator: existsTag
    end blank: false, nullable: false, validator: existsTag
}
}

Answer 1:

你可以看这里: Grails的hasErrors方法与三元运算符? 但不久,hasErrors(豆:validationCommand,场:“开始”),你期望它并不表现(意思是 - 它不返回一个布尔值)。 它适用于CSS类表达式中使用。 所以你的情况我想创建一个标签或也有一个快速的解决方法(这有点相貌丑陋,所以我真的不推荐它): <g:if test="${ hasErrors(bean:validationCommand, field:'start', 'true') } == 'true'"> <g:set var="startState" value="error"/> </g:if> <g:else> <g:set var="startState" value="success"/> </g:else> <div class="control-group ${startState}">



文章来源: Changing twitter bootstrap validation states of a control group in grails