在grails中更改对照组的twitter引导验证状态

问题描述:

所以我有一个带有表单的gsp,并且我试图在验证表单字段时使用twitter验证状态。我正在使用grails命令对象进行验证。问题是,如果使用“$ {hasErrors(bean:validationCommand,field:'start','error')}”命令对象的字段有错误,grails提供了一种将“error”类添加到控件组的方法。 。如果字段“开始”具有验证错误,则会添加错误标记。这工作很好,直到一点。因此验证错误时,开始字段变为红色。但我希望它也能在验证成功时变成绿色!这没有发生。在grails中更改对照组的twitter引导验证状态

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

<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)至成功或错误,然后在div中使用$ {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 
     } 
    } 
} 
} 

Command对象是:

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 
} 
} 
+0

显示控制器与所有这个 –

+0

行动添加了控制器和命令对象,但这是一个gsp问题吧?我如何根据bean是否有错误或成功验证来添加成功/错误类或无条件地添加? –

你可以看这里:Grails hasErrors method with ternary operator?,但不久,hasErrors(豆:validationCommand ,field:'start')的行为并不像你期望的那样(意思是它不返回布尔值)。它的目的是在css-class表达式中使用。所以你的情况我想创建一个标签或也有一个快速的解决方法(这有点相貌丑陋,所以我真的不推荐它): <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}">