所以我有一个带有表单的 gsp,我在验证表单字段时尝试使用 twitter 验证状态。我正在使用 grails 命令对象进行验证。问题在于,如果命令对象中的字段使用“${hasErrors(bean:validationCommand, field:'start', 'error')}”出现错误,grails 提供了一种将“error”类添加到控制组的方法. 如果“开始”字段有验证错误,这会添加错误标签。这在一定程度上可以正常工作。因此,开始字段在验证错误时变为红色。但我也希望它在验证成功时变成绿色!这没有发生。
所以,这里是开始表单字段:
<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-->
这样做是因为该字段从一开始就是绿色的(即使在文本字段中没有输入任何内容),然后在出错时变为红色,或保持绿色。
我最后一次尝试进行这项工作涉及另一个 if 测试,以查看该字段是否设置为使用
<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
}
}