ajax - Grails和AJAX:使用ModalBox或YUI2对话框可以进行Grails表单验证吗?

标签 ajax grails yui grails-plugin grails-validation

几个Grails应用程序(例如我正在编写的应用程序)需要一个/ user View 和/ admin View ,它们是“仪表板”,基本上,该用户或admin可以登陆该页面,可能是在成功登录后并且所有数据表和选项卡都在那里,因此他们几乎不需要导航到该页面,即可提供更令人满意的用户体验,例如Gmail或Mint用户已经习惯了。

为了允许从主/ user仪表板进行搜索和形成帖子,我一直在使用modalbox插件v0.4 grails install modalbox。 Modalbox显然是在管理GET / POST本身,不幸的是,它丢失了典型约束块提供给您的99%的验证。

现在通过替换g:submitButton来解决此问题,如图所示将一些基本JavaScript放入提交中。 (当然,这是一个糟糕的解决方法。)

<input type="button" name="create" class="save" onclick="if (!(document.getElementById('name').value === '' || document.getElementById('summary').value === '')) { document.forms[0].submit(); }" value="Create" />

但是必须有更好的方法!我被告知要使用g:remoteForm,但是还没有看到一个足够完整的示例可以使用Modalbox。也许人们正在使用一个新窗口,它会像Gmail的撰写窗口一样自动关闭几秒钟?

对于SiteMesh模板,或者至少是“渲染模板:”甚至是GSP标签(如modalBox:createLink),这种情况很常见,以至于已经成熟。

Gtown项目空间中可用的here源。

最佳答案

Modalbox上的示例的灯箱中已经隐藏了验证错误:

无效的电子邮件!,因此,我认为如果您要使用Grails验证,则必须控制形成自己。在这种情况下,灯箱插件仅负责绘制灯箱,您将提供所有表单内容。

我使用Boxy(另一个灯箱插件,该插件应与您的Modalbox相似),这是我如何在灯箱中使用Grails验证的示例。创建灯箱时,我会使用“ shell ”操作来填充它。 shell操作将呈现一个模板,并且在模板内部是一个,它会第一次绘制搜索表单。 调用验证操作,并使用验证操作的结果重绘灯箱的内容。结果可能是成功页面或验证错误页面。

命令对象(在本示例中为SearchCommand)的使用仅用于演示。

Controller :

def launchLightbox = {
    render template: 'lightboxFrame'
}

def lightboxContents = { SearchCommand cmd ->

    // if the search failed, re-draw the search form with validation errors
    if (cmd.hasErrors()) {
        return [cmd: cmd]
    } 

    // the search succeeded. Show the results within the lightbox
    else {
        render template: 'searchResults', model: [results: cmd.results]
    }
}

_lightboxFrame.gsp:
<g:formRemote name="searchLightbox" 
        url="[action: 'lightboxContents']" update="lightboxContentsDiv">
    <div id="lightboxContentsDiv">
        <g:include view="/yourController/_lightboxContents.gsp"/>
    </div>
</g:formRemote>

_lightboxContents.gsp:
<g:renderErrors bean="${cmd}"/>
<p>Enter your search:</p>
<g:textField name="search" value="${cmd?.search}"/>
<g:submitButton name="submitButton" value="Submit"/>

如果您想更好地控制搜索成功或失败时的操作,例如在失败时呈现验证错误或在成功时关闭灯箱,则可能需要编写自己的JavaScript回调。

Grails Remote Constraints plugin与此问题有关,可能对您有帮助。我已经有一段时间没有尝试过了,但是您应该能够使用它来重绘Grails生成的验证错误,从而异步重绘页面的某些部分。

关于ajax - Grails和AJAX:使用ModalBox或YUI2对话框可以进行Grails表单验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221355/

相关文章:

php - Ajax 如何将 Javascript 字符串传递给 php

Jquery Ajax twitter/facebook 个人资料图像和 http 302

javascript - 如何使用 DataTables 插件显示具有 2 个标题的表格?

sql - 在hql中分页结果的最佳方法是什么

java - 尝试在 Grails 中发送 SimpleMailMessage 时必须首先发出 STARTTLS 命令

javascript - 访问 YUI 表中的嵌套 JSON

javascript - 使用 ajax 和 php 提交表单

Java Melody web.xml 过滤器不适用于 Jetty Server

javascript - YUI3加载器如何决定将 "?"附加到配置的comboBase

c# - 如何让 YUI 编辑器传递其内容