2013-10-11 31 views
1

所以我有一個帶有表單的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是否有錯誤或成功驗證來添加成功/錯誤類或無條件地添加? –

回答

0

你可以看這裏: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}">