亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? validationtaglib.groovy

?? grails用戶使用指南
?? GROOVY
字號:
/* Copyright 2004-2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT c;pWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */import org.springframework.validation.Errors;import org.springframework.context.NoSuchMessageException;import org.springframework.web.servlet.support.RequestContextUtils as RCU;import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU;/***  A  tag lib that provides tags to handle validation and errors** @author Graeme Rocher* @since 17-Jan-2006*/class ValidationTagLib {    /**     * Checks if the request has errors either for a field or global errors     */    def hasErrors = { attrs, body ->        def model = attrs['model']        def checkList = []        if(model) {            checkList = model.findAll { k,v ->                grailsApplication.isGrailsDomainClass(v.class)            }        }        if(attrs['bean']) {            checkList << attrs['bean']        }        else {			if(request.attributeNames) {				request.attributeNames.each { ra ->					if(ra) {                        if(ra instanceof Errors)                            checkList << ra                        else if(grailsApplication.isGrailsDomainClass(ra.class))                            checkList << ra					}				}			}        }        for(i in checkList) {            def errors = null            if(grailsApplication.isGrailsDomainClass(i.class)) {                if(i.hasErrors())                    errors = i.errors            }            else if(i instanceof Errors) {               errors = i            }            if(errors) {                if(attrs['field']) {                    if(errors.hasFieldErrors(attrs['field'])) {                        body()                    }                }                else {                    body()                }            }        }    }    /**     * Loops through each error for either field or global errors     */    def eachError = { attrs, body ->        def model = attrs['model']        def errorList = []        if(model) {            errorList = model.findAll { k,v ->                grailsApplication.isGrailsDomainClass(v.class)            }        }        if(attrs['bean']) {            errorList << attrs['bean']        }        else {            request.attributeNames.each {                def ra = request[it]                if(ra) {                    if(ra instanceof Errors)                        errorList << ra                    else if(grailsApplication.isGrailsDomainClass(ra.class))                        errorList << ra                }            }        }        for(i in errorList) {            def errors = null            if(grailsApplication.isGrailsDomainClass(i.class)) {                if(i.hasErrors())                    errors = i.errors            }            else if(i instanceof Errors) {               errors = i            }            if(errors && errors.hasErrors()) {                if(attrs['field']) {                    if(errors.hasFieldErrors(attrs['field'])) {                        errors.getFieldErrors( attrs["field"] ).each {                            body(it)                        }                    }                }                else {                    errors.allErrors.each {                        body( it )                    }                }            }        }    }    /**     * Loops through each error and renders it using one of the supported mechanisms (defaults to "list" if unsupported)     */    def renderErrors = { attrs, body ->        def renderAs = attrs.remove('as')        if(!renderAs) renderAs = 'list'        if(renderAs == 'list') {            out << "<ul>"            eachError(attrs, {                out << "<li>"                message(error:it)                out << "</li>"              }            )            out << "</ul>"        }    }    /**     * Resolves a message code for a given error or code from the resource bundle     */    def message = { attrs ->          def messageSource = grailsAttributes                                .getApplicationContext()                                .getBean("messageSource")          def locale = RCU.getLocale(request)          if(attrs['error']) {                def error = attrs['error']                def defaultMessage = ( attrs['default'] ? attrs['default'] : error.defaultMessage )                def message = messageSource.getMessage( error.code,                                                        error.arguments,                                                        defaultMessage,                                                        locale )                if(message) {                    out << message                }                else {                    out << error.code                }          }          if(attrs['code']) {                def code = attrs['code']                def args = attrs['args']                 def defaultMessage = ( attrs['default'] ? attrs['default'] : code )                def message = messageSource.getMessage( code,                                                        args == null ? null : args.toArray(),                                                        defaultMessage,                                                        locale )                if(message) {                    out << message                }                else {                    out << code                }          }    }    // Maps out how Grails contraints map to Apache commons validators    static CONSTRAINT_TYPE_MAP = [ email : 'email',                                             creditCard : 'creditCard',                                             match : 'mask',                                             blank: 'required',                                             nullable: 'required',                                             maxSize: 'maxLength',                                             minSize: 'minLength',                                             range: 'intRange',                                             size: 'intRange',                                             length: 'maxLength,minLength' ]    /**     * Validates a form using Apache commons validator javascript against constraints defined in a Grails     * domain class     *     * TODO: This tag is a work in progress     */    def validate = { attrs, body ->        def form = attrs["form"]        def againstClass = attrs["against"]        if(!form)            throwTagError("Tag [validate] is missing required attribute [form]")        if(!againstClass) {            againstClass = form.substring(0,1).toUpperCase() + form.substring(1)        }        def app = grailsAttributes.getGrailsApplication()        def dc = app.getGrailsDomainClass(againstClass)        if(!dc)            throwTagError("Tag [validate] could not find a domain class to validate against for name [${againstClass}]")        def constrainedProperties = dc.constrainedProperties.collect { k,v -> return v }        def appliedConstraints = []        constrainedProperties.each {           appliedConstraints += it.collect{ it.appliedConstraints }        }        appliedConstraints = appliedConstraints.flatten()        def fieldValidations = [:]        appliedConstraints.each {            def validateType = CONSTRAINT_TYPE_MAP[it.name]            if(validateType) {                if(fieldValidations[validateType]) {                    fieldValidations[validateType] << it                }                else {                     fieldValidations[validateType] =  [it]                }            }        }        out << '<script type="text/javascript">\n'        fieldValidations.each { k,v ->           def validateType = k           if(validateType) {                def validateTypes = [validateType]                if(validateType.contains(",")) {                    validateTypes = validateType.split(",")                }                validateTypes.each { vt ->                    // import required script                    def scriptName = "org/apache/commons/validator/javascript/validate" + vt.substring(0,1).toUpperCase() + vt.substring(1) + ".js"                    def inStream = getClass().classLoader.getResourceAsStream(scriptName)                    if(inStream) {                        out << inStream.text                    }                    out << "function ${form}_${vt}() {"                    v.each { constraint ->                           out << "this.${constraint.propertyName} = new Array("                           out << "document.forms['${form}'].elements['${constraint.propertyName}']," // the field                           out << '"Test message"' // TODO: Resolve the actual message                           switch(vt) {                                case 'mask': out << ",function() { return '${constraint.regex}'; }";break;                                case 'intRange': out << ",function() { if(arguments[0]=='min') return ${constraint.range.from}; else return ${constraint.range.to} }";break;                                case 'floatRange': out << ",function() { if(arguments[0]=='min') return ${constraint.range.from}; else return ${constraint.range.to} }";break;                                case 'maxLength': out << ",function() { return ${constraint.maxSize};  }";break;                                case 'minLength': out << ",function() { return ${constraint.minSize};  }";break;                           }                           out << ');\n'                    }                    out << "}\n"                }            }        }        out << 'function validateForm(form) {\n'         fieldValidations.each { k,v ->               def validateType = k.substring(0,1).toUpperCase() + k.substring(1)               out << "if(!validate${validateType}(form)) return false;\n"         }        out << 'return true;\n';        out << '}\n'      //  out << "document.forms['${attrs['form']}'].onsubmit = function(e) {return validateForm(this)}\n"        out << '</script>'    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久国产综合久久| 国产乱国产乱300精品| 国产精品久久久久久一区二区三区| 欧美一区二区三区的| 欧美揉bbbbb揉bbbbb| 欧美视频一区二区三区| 色八戒一区二区三区| 欧美日韩精品一区二区在线播放| 欧美亚洲丝袜传媒另类| 欧美一区二区三级| 久久众筹精品私拍模特| 久久久亚洲高清| 中文字幕制服丝袜成人av | 精品国产区一区| 精品久久久影院| 日本一区二区三级电影在线观看| 最新高清无码专区| 亚洲国产三级在线| 国产在线精品不卡| 波多野结衣精品在线| 91福利视频在线| 制服丝袜成人动漫| 久久新电视剧免费观看| 亚洲色图欧洲色图婷婷| 亚洲mv在线观看| 国产成人aaa| 欧美日本国产视频| 欧美成人精品福利| 亚洲四区在线观看| 韩国v欧美v日本v亚洲v| 91蝌蚪porny九色| 日韩欧美国产不卡| 亚洲欧美自拍偷拍| 久久爱另类一区二区小说| 成人黄色a**站在线观看| 91精品婷婷国产综合久久性色| 精品国产91久久久久久久妲己| 亚洲欧美视频在线观看| 美女视频黄a大片欧美| 成人小视频在线观看| 欧美一区二区国产| 亚洲另类在线制服丝袜| 国产在线日韩欧美| 欧美日韩精品一区视频| 亚洲欧洲日韩在线| 精品一区二区三区在线播放| 91视频国产资源| 久久久精品免费网站| 日韩成人午夜精品| 日本精品免费观看高清观看| 欧美极品aⅴ影院| 久久超碰97人人做人人爱| 欧美唯美清纯偷拍| 日韩理论片中文av| 国产经典欧美精品| 久久综合一区二区| 五月婷婷欧美视频| 欧美日韩免费一区二区三区 | 五月婷婷综合在线| 色婷婷狠狠综合| 国产精品国产自产拍高清av| 国产乱码精品一区二区三| 欧美一区二视频| 视频一区二区三区中文字幕| 91在线国产观看| 中文字幕视频一区二区三区久| 国产v综合v亚洲欧| 国产午夜精品理论片a级大结局| 日本va欧美va精品发布| 欧美精品粉嫩高潮一区二区| 亚洲成人福利片| 欧美高清精品3d| 亚洲va欧美va天堂v国产综合| 91麻豆免费看| 一区二区三区中文字幕| 一本大道久久a久久精品综合| ...av二区三区久久精品| 不卡一区二区三区四区| 国产精品久久久久久久久图文区| 国产成人高清在线| 成人免费一区二区三区在线观看| 国产99精品国产| 亚洲欧美电影院| 欧美视频完全免费看| 日韩电影一二三区| 日韩欧美第一区| 国产精品一区二区无线| 国产精品久久毛片av大全日韩| 91日韩精品一区| 日韩国产欧美在线观看| 欧美r级在线观看| 国产成人一级电影| 亚洲精品视频在线| 欧美久久久久免费| 国产精品中文字幕日韩精品 | 日韩一区中文字幕| 欧美日韩午夜在线视频| 久久99久久精品| 国产亚洲综合在线| 93久久精品日日躁夜夜躁欧美| 一区二区三区四区乱视频| 4438x亚洲最大成人网| 国产精品羞羞答答xxdd| 亚洲一区在线播放| 久久久久国产成人精品亚洲午夜| 91色porny| 国产一区二区三区不卡在线观看| 国产精品美女久久久久av爽李琼 | 国产成人丝袜美腿| 亚洲黄色录像片| 久久亚洲影视婷婷| 欧美专区亚洲专区| 国产成人a级片| 天堂成人国产精品一区| 国产精品久久久久久一区二区三区| 在线精品国精品国产尤物884a| 国产精品一区在线观看你懂的| 亚洲午夜电影在线观看| 欧美韩国日本不卡| 久久一二三国产| 911精品产国品一二三产区| 91亚洲精品久久久蜜桃| 久久国内精品视频| 亚洲高清免费在线| 国产精品国产三级国产普通话99 | 一区二区三区中文字幕电影| 欧美va日韩va| 欧美一区二区三区色| 欧美视频在线观看一区二区| 成人一区二区在线观看| 精品亚洲国产成人av制服丝袜| 亚洲一区二区三区影院| 国产精品久久久久7777按摩 | 亚洲色图欧美激情| 国产偷国产偷亚洲高清人白洁 | 性做久久久久久| 亚洲天天做日日做天天谢日日欢| 久久天堂av综合合色蜜桃网| 欧美一区二区人人喊爽| 91麻豆精品国产| 欧美日韩在线免费视频| 91福利在线免费观看| 日本韩国欧美三级| 91行情网站电视在线观看高清版| 成人小视频免费在线观看| 国产99久久久国产精品| 成人午夜电影网站| 国产成人av影院| 国产福利不卡视频| 成人免费精品视频| 北岛玲一区二区三区四区| 成人性色生活片免费看爆迷你毛片| 国产精品亚洲第一区在线暖暖韩国 | 国产精品色哟哟| 国产精品三级久久久久三级| 国产精品午夜在线观看| 国产精品灌醉下药二区| 亚洲精品成人在线| 亚洲一区二区三区四区在线免费观看| 亚洲男人的天堂网| 亚洲成av人片一区二区三区| 五月婷婷欧美视频| 精品一区二区三区在线观看国产 | 99国产精品久久| 色综合色综合色综合 | 久久se这里有精品| 成人一区二区视频| 欧美影院午夜播放| 91精品国产福利在线观看| 日韩欧美的一区二区| 国产精品视频你懂的| 亚洲激情av在线| 久久精品国产久精国产| 国产69精品久久久久777| 91久久奴性调教| 911精品产国品一二三产区 | 成人a级免费电影| 欧洲精品一区二区三区在线观看| 欧美丰满一区二区免费视频| 精品久久人人做人人爱| 亚洲视频免费在线| 日韩精品亚洲专区| 粉嫩嫩av羞羞动漫久久久| 欧美性生活大片视频| 久久久五月婷婷| 亚洲一区免费观看| 国产一区二区三区日韩| 欧美午夜精品一区| 国产婷婷一区二区| 亚洲成av人片www| 国产精品99久久不卡二区| 精品视频资源站| 国产精品久久久99| 麻豆91精品视频| 在线观看一区二区视频| 亚洲国产精品成人综合| 蜜桃久久av一区| 欧美系列日韩一区| 中文字幕二三区不卡| 激情综合色综合久久综合|