分享代码 表单验证+对话框+日期格式化+日期选择框+select美化js框架

分享代码 表单验证+对话框+日期格式化+日期选择框+select美化js框架


分享代码 表单验证+对话框+日期格式化+日期选择框+select美化js框架
更多下载 http://pan.baidu.com/s/1i3Kdn2t






部分代码 js / php 对应版的日期格式化类


/*
// @author : lael
// blog : http://hi.baidu.com/lael80
// http://www.gzyd.net
// all right reserved.
*/
var dateutils = function(){}
/*
d : 日期字符串
ff : (d : 日期字符串)原格式/未知为false
tf : 新格式

f、ff、tf : 格式化字符串,由以下结构组成(具体参考php日期格式字符,但仅支持以下所列) 
要直接显示以下字符,请用 \\ 转义,如:Y\\Y\\e\\ar-m-d H\\Houri:s
//
Y  4 位数字完整表示的年份  例如:1999 或 2003
y  2 位数字表示的年份  例如:99 或 03
//
n  数字表示的月份,没有前导零  1 到 12
m  数字表示的月份,有前导零  01 到 12
e (非php定义,自定义的)中文月份 一月 到 十二月
M  三个字母缩写表示的月份  Jan 到 Dec
F  月份,完整的文本格式,例如 January 或者 March  January 到 December
//
j  月份中的第几天,没有前导零  1 到 31
d  月份中的第几天,有前导零的 2 位数字  01 到 31
//
g  小时,12 小时格式,没有前导零  1 到 12
G  小时,24 小时格式,没有前导零  0 到 23
h  小时,12 小时格式,有前导零  01 到 12
H  小时,24 小时格式,有前导零  00 到 23
//
i  有前导零的分钟数  00 到 59
//
s  秒数,有前导零  00 到 59
//
x (非php定义,自定义的)中文上下午
a  小写的上午和下午值  am 或 pm
A  大写的上午和下午值  AM 或 PM
//
D  星期中的第几天,文本表示,3 个字母  Mon 到 Sun
l (“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
k (非php定义,自定义的)中文星期 星期日 到 星期六
w  星期中的第几天,数字表示  0(表示星期天)到 6(表示星期六)
//
*/
/*
<script language="javascript" src="{$CFG[skinpath]}javascript/dateutils.js"></script>
<script language="javascript">
var _dateutils = new dateutils();
alert(_dateutils.format('2001-12-23 星期日 21:11:10', 'Y-m-d H:i:s', 'Y-m-d H:i:s'));
alert(_dateutils.format('2001-12-23 星期日 21:11:10', false, 'Y-m-d H:i:s'));
</script> 
*/
dateutils.prototype.format = function(d, ff, tf){
var wk = [['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], 
 ['Sun', 'Mon', 'Tur', 'Wed', 'Thu', 'Fri', 'Sat'],
 ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']]; 
var mh = [['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
 ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
 ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']]; 

var c = this.newdate(d, ff);
var o = {
'Y' : c.getFullYear(),
'y' : c.getYear(),
'n' : c.getMonth() + 1,
'm' : this.fatstr(c.getMonth() + 1, 2, '0'),
'e' : mh[0][c.getMonth()],
'M' : mh[1][c.getMonth()],
'F' : mh[2][c.getMonth()],
'j' : c.getDate(),
'd' : this.fatstr(c.getDate(), 2, '0'),
'g' : (c.getHours() > 12 ? c.getHours() - 12 : c.getHours()),
'h' : this.fatstr(c.getHours() > 12 ? c.getHours() - 12 : c.getHours(), 2, '0'),
'G' : c.getHours(),
'H' : this.fatstr(c.getHours(), 2, '0'),
'i' : this.fatstr(c.getMinutes(), 2, '0'),
's' : this.fatstr(c.getSeconds(), 2, '0'),
'x' : (c.getHours() >= 0 && c.getHours() < 12 ? '上午' : '下午'),
'a' : (c.getHours() >= 0 && c.getHours() < 12 ? 'am' : 'pm'),
'A' : (c.getHours() >= 0 && c.getHours() < 12 ? 'AM' : 'PM'),
'k' : wk[0][c.getDay()],
'D' : wk[1][c.getDay()],
'l' : wk[2][c.getDay()],
'w' : c.getDay()
};
if(!tf)tf = 'Y-m-d H:i:s';
var r = this.formatregexp(tf);
var m = this.stripformat(tf).match(r);
if(!m)return this.stripformat(tf);
var n = r.substr(1, r.length - 2);
for(var i = 1; i < m.length; i ++){
n = n.replace('(' + m[i] + ')', o[m[i]]);
}
return this.stripregexp(n);
}
dateutils.prototype.validator = function(d, f){
return this.format(d, f, f) == d;
}
dateutils.prototype.newdate = function(d, f){
try{if(d.getFullYear())return d;}catch(e){}
var n = ['', '', '', '', '', ''];
if(f){
var _d = d.match(this.dateregexp(f));
var _f = this.stripformat(f).match(this.formatregexp(f));
if(_d && _f){
var mh = [['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
 ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
 ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']];
var aA = 0;
var gh = false;
var GH = false;
for(var i = 0; i < _f.length; i ++){
if(_f[i] == 'y')n[0] = '20' + _d[i];
if(_f[i] == 'Y')n[0] = _d[i];
if(_f[i] == 'e' || _f[i] == 'M' || _f[i] == 'F' || _f[i] == 'n' || _f[i] == 'm'){
var _n = this.inarray(_d[i], mh[0]);
if(_n == -1)_n = this.inarray(_d[i], mh[1]);
if(_n == -1)_n = this.inarray(_d[i], mh[2]);
n[1] = _n == -1 ? _d[i] * 1 - 1 : _n;
}
if(_f[i] == 'j' || _f[i] == 'd')n[2] = _d[i];
if(_f[i] == 'g' || _f[i] == 'h'){gh = true; n[3] = _d[i];}
if(_f[i] == 'G' || _f[i] == 'H'){GH = true; n[3] = _d[i];}
if(_f[i] == 'a' || _f[i] == 'A'){
if(_d[i] == 'am' || _d[i] == 'AM'){
aA = 0;
}else{
aA = 12;
}
}
if(_f[i] == 'x'){
if(_d[i] == '上午' || _d[i] == '下午'){
aA = 0;
}else{
aA = 12;
}
}
if(_f[i] == 'i')n[4] = _d[i];
if(_f[i] == 's')n[5] = _d[i];
}
if(GH === false && gh)n[3] = n[3] * 1 + aA;//上下午调整
}
}
var _d = new Date(d);
if(isNaN(_d))_d = new Date(this.rpdate(d));
if(isNaN(_d))_d = new Date();

if(!/\d{4}/.test(n[0]))n[0] = _d.getFullYear();
if(!/(0*[0-9]|1[0-1])/.test(n[1]))n[1] = _d.getMonth();
if(!/(0*[1-9]|[1-2][0-9]|30|31)/.test(n[2]))n[2] = _d.getDate();
if(!/([0-1]*[0-9]|20|21|22|23)/.test(n[3]))n[3] = _d.getHours();
if(!/([0-5]*[0-9])/.test(n[4]))n[4] = _d.getMinutes();
if(!/([0-5]*[0-9])/.test(n[5]))n[5] = _d.getSeconds();
return (new Date(n[0], n[1], n[2], n[3], n[4], n[5]));
}
dateutils.prototype.rpdate = function(d){
......................................................





<?php
defined('YD_TRUE') or exit('Access Denied');
/*
// @author : lael
// blog : http://hi.baidu.com/lael80
// http://www.gzyd.net
// all right reserved.
*/

/*
d : 日期字符串
ff : (d : 日期字符串)原格式/未知为false
tf : 新格式

f、ff、tf : 格式化字符串,由以下结构组成(具体参考php日期格式字符,但仅支持以下所列) 
要直接显示以下字符,请用 \\ 转义,如:Y\\Y\\e\\ar-m-d H\\Houri:s
//
Y  4 位数字完整表示的年份  例如:1999 或 2003
y  2 位数字表示的年份  例如:99 或 03
//
n  数字表示的月份,没有前导零  1 到 12
m  数字表示的月份,有前导零  01 到 12
e (非php定义,自定义的)中文月份 一月 到 十二月
M  三个字母缩写表示的月份  Jan 到 Dec
F  月份,完整的文本格式,例如 January 或者 March  January 到 December
//
j  月份中的第几天,没有前导零  1 到 31
d  月份中的第几天,有前导零的 2 位数字  01 到 31
//
g  小时,12 小时格式,没有前导零  1 到 12
G  小时,24 小时格式,没有前导零  0 到 23
h  小时,12 小时格式,有前导零  01 到 12
H  小时,24 小时格式,有前导零  00 到 23
//
i  有前导零的分钟数  00 到 59
//
s  秒数,有前导零  00 到 59
//
x (非php定义,自定义的)中文上下午
a  小写的上午和下午值  am 或 pm
A  大写的上午和下午值  AM 或 PM
//
D  星期中的第几天,文本表示,3 个字母  Mon 到 Sun
l (“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
k (非php定义,自定义的)中文星期 星期日 到 星期六
w  星期中的第几天,数字表示  0(表示星期天)到 6(表示星期六)
//
*/

/*
require inc_path('classes/dateutils.class.php');
$du = new DateUtils();
echo $du->newdate('2010Year-11-12 13Hour14:15', 'Y\\Y\\e\\ar-m-d H\\Houri:s');
echo '<br />';
echo $du->format('2010Year-11-12 13Hour14:15', 'Y\\Y\\e\\ar-m-d H\\Houri:s', 'Y-m-d H:i:s F e M F k D l x');
exit;
*/

class DateUtils{
function __construct(){}

function format($d, $ff = false, $tf = false){
$wk = array(array('星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'), 
 array('Sun', 'Mon', 'Tur', 'Wed', 'Thu', 'Fri', 'Sat'),
 array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')); 
$mh = array(array('一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'),
 array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'),
 array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December')); 

$c = $this->newdate($d, $ff);
$o = array(
'Y' => date('Y', $c),
'y' => date('y', $c),
'n' => date('n', $c),
'm' => date('m', $c),
'e' => $mh[0][date('n', $c)],
'M' => $mh[1][date('n', $c)],
'F' => $mh[2][date('n', $c)],
'j' => date('j', $c),
'd' => date('d', $c),
'g' => date('g', $c),
'h' => date('h', $c),
'G' => date('G', $c),
'H' => date('H', $c),
'i' => date('i', $c),
's' => date('s', $c),
'x' => date('a', $c) == 'am' ? '上午' : '下午',
'a' => date('a', $c),
'A' => date('A', $c),
'k' => $wk[0][date('w', $c)],
'D' => $wk[1][date('w', $c)],
'l' => $wk[2][date('w', $c)],
'w' => date('w', $c)
);
if(!$tf)$tf = 'Y-m-d H:i:s';
$r = $this->formatregexp($tf);
preg_match_all($r, $this->stripformat($tf), $m);
if(!$m)return $this->stripformat($tf);
$n = substr($r, 2, strlen($r) - 4);
for($i = 1; $i < count($m); $i ++){
$n = str_replace('('.$m[$i][0].')', $o[$m[$i][0]], $n);
}
return $this->stripregexp($n);
}

function validator($d, $f){
return $this->format($d, $f, $f) == $d;
}

function newdate($d, $f = false){
................................................... 
?>

回答: 分享代码 表单验证+对话框+日期格式化+日期选择框+select美化js框架

  1. 分享代码 表单验证+对话框+日期格式化+日期选择框+select美化js框架

提交表单时如何既能先表单验证再访问action

  1. Q

    问题具体描述:我想对表单做及时验证功能,在提交数据前对表单数据验证,可最后一个文本框不知道如何设置,试了试在提交按钮里与form<onsubmit="return 函数()" 效果一样,都同时执行了action和表单验证,有没有哪种方法能先表单在action,我不想用xml验证action,效果不好。

    jsp页面代码:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
            <base href="<%=basePath%>">

            <title>填写进货信息</title>

            <meta http-equiv="pragma" content="no-cache">
            <meta http-equiv="cache-control" content="no-cache">
            <meta http-equiv="expires" content="0">
            <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
            <meta http-equiv="description" content="This is my page">
            <link rel="stylesheet" type="text/css" href="theme/office/style.css" />
            <script type="text/javascript" src="js/Calendar6.js">
    </script>

        </head>
        <script type="text/javascript">
    function checkName() {
        var str = document.getElementById("name").value;
        if (str == '') {
            document.getElementById("vname").innerHTML = "<font color='red'>请填写进货名称</font>";
            return false;
        } else {
            document.getElementById("vname").innerHTML = "";
            return true;
        }
    }
    function checkNum() {
        var str = document.getElementById("num").value;
        if (str == '') {
            document.getElementById("vnum").innerHTML = "<font color='red'>请填写进货数量</font>";
            return false;
        } else {
            document.getElementById("vnum").innerHTML = "";
            return true;
        }
    }
    function checkMan() {
        var str = document.getElementById("man").value;
        if (str == '') {
            document.getElementById("vman").innerHTML = "<font color='red'>请填写进货人</font>";
            return false;
        } else {
            document.getElementById("vman").innerHTML = "";
            return true;
        }
    }
    function checkSupplier() {
        var str = document.getElementById("supplier").value;
        if (str == '') {
            document.getElementById("vs").innerHTML = "<font color='red'>请填写供应商</font>";
            return false;
        } else {
            document.getElementById("vs").innerHTML = "";
            return true;
        }
    }
    function checkPrice() {
        var str = document.getElementById("price").value;
        if (str == '') {
            document.getElementById("vp").innerHTML = "<font color='red'>请输入单价</font>";
            return false;
        } else {
            document.getElementById("vp").innerHTML = "";
            return true;
        }
    }
    function checkAll() {
        if (checkName() && checkNum() && checkMan() && checkSupplier()
                && checkPrice()) {
            return true;
        } else {
            return false;
        }
    }
    </script>

        <body class="tab-nav-page" onmousedown="return false;"
            onselectstart="return false;">

            <ul class="group">
                <li>
                    <div class="hl" id="tb1">
                        <span class="l"> </span>
                        <span class="a"></span>
                        <span class="r"> </span>
                    </div>
                </li>
                <li class="active">
                    <div class="hl" id="tb2">
                        <span class="l"> </span>
                        <span class="a">进货新增 </span>
                        <span class="r"> </span>
                    </div>
                </li>
            </ul>
            <div class="bgline"></div>
            </br>
            </br>
            <table class="page-header" align="center">
                <tbody>
                    <tr>
                        <td class="title">
                            <img src="images/menu/infofind.gif" />
                            <span>填写进货信息</span>
                        </td>
                    </tr>
                </tbody>
            </table>
            <form enctype="multipart/form-data" method="post" name="form1"
                action="buy_addBuy" onsubmit="checkAll()">
                <table class="frame" align="center">
                    <tbody>
                        <tr>
                            <td class="label">
                                商品名称:
                            </td>
                            <td>
                                <input type="text" name="buy.goodsname" id="name"
                                    onblur="checkName()" />
                                <div id="vname" style="display: inline"></div>
                            </td>

                        </tr>
                        <tr>
                            <td class="label">
                                商品类型:
                            </td>
                            <td>
                                <select class="text" name="typeid">
                                    <option value="--选择进货类型--">
                                        --选择进货类型--
                                    </option>
                                    <c:forEach items="${type}" var="type">
                                        <option value="${type.id}">
                                            ${type.typename}
                                        </option>
                                    </c:forEach>

                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td class="label">
                                进货数量:
                            </td>
                            <td>
                                <s:textfield name="buy.goodsnum" cssClass="text" id="num"
                                    onblur="checkNum()" />
                                <div id="vnum" style="display: inline"></div>
                            </td>
                        </tr>
                        <tr>
                            <td class="label">

                                进货日期:
                            </td>
                            <td>
                                <input type="text" class="text" name="buy.buydate"
                                    onfocus=calendar(this) />
                            </td>
                        </tr>
                        <tr>
                            <td class="label">
                                进货人:
                            </td>
                            <td>
                                <s:textfield name="buy.buyman" cssClass="text" id="man"
                                    onblur="checkMan()" />
                                <div id="vman" style="display: inline"></div>
                            </td>
                        </tr>
                        <tr>
                            <td class="label">
                                供应商:
                            </td>
                            <td>
                                <s:textfield name="buy.supplier" cssClass="text" id="supplier"
                                    onblur="checkSupplier()" />
                                <div id="vs" style="display: inline"></div>
                            </td>
                        </tr>
                        <tr>
                            <td class="label">
                                单价:
                            </td>
                            <td>
                                <s:textfield name="buy.price" cssClass="text" id="price"
                                    onblur="checkPrice()" />
                                <div style="display: inline" id="vp"></div>
                            </td>
                        </tr>
                     
                    </tbody>
                </table>
                <table align="center">
                    <tbody>
                        <tr class="cmdbar">
                            <td>
                                <input type="submit" value="提交" />
                            </td>
                            <td>
                                <input type="reset" value="重填" />
                            </td>
                        </tr>
                    </tbody>
                </table>
            </form>

        </body>
    </html>

  2. A
    <tr class="cmdbar">
                            <td>
                                <input type="button" onclick="sub()" value="提交" />
                            </td>
                            <td>
                                <input type="reset" value="重填" />
                            </td>
                        </tr>
    js代码
    function sub(){
    boolean flag=true;//验证是否通过 默认通过
      进行验证,不通过就flag=false;
    if(!flag){
        alert("不通过")
        return false;
    }else{
       document.getElementById("form1").submit();//表单提交
    }
    }

JQuery表单验证插件EasyValidator,超级简单,隆重推荐!

  1. Q
    本插件的宗旨是:用户无需写一行JS验证代码,只需在要验证的表单中加入相应的验证属性即可,让验证功能易维护,可扩展,更容易上手。

    DEMO中已经包含了常用的正则表达式,可以直接复用,为了考虑扩展性,所以针对不同用户特殊需求,自行写正则吧。

    EasyValidator实现的功能:

    1. 普通表单验证(在表单中加入reg="正则表达式")

        如: <input name="username" reg="正则" />

        普通表单验证DEMO:http://easyvalidator.googlecode.com/svn/trunk/index.html

    2. AJAX表单验证(在表单中加入url="验证系统地址")

        如: <input name="username" url="地址" />

        AJAX验证DEMO:没有在线演示,请在本地运行ajax_demo.html,请求远程的PHP文件,当然可以为JSP或者ASP,我这里在程序里预设了一些已存在的数据,用户可以自行参考。

    3. 普通表单验证 +  AJAX表单验证 (普通验证通过以后,再进行AJAX验证)

        如: <input name="username" reg="正则" url="地址" />

    4. TIP提示(在表单中加入tip="提示信息"),TIP可在以上3种验证方式中加入

        如: 
        A. 具有TIP功能的普通表单验证: <input name="username" reg="正则" tip="用户名的格式应该为XXXX"/>
        B. 具有TIP功能的AJAX表单验证: <input name="username" url="地址" tip="用户名的格式应该为XXXX"/>
        C. 具有TIP功能的 [普通表单验证 + AJAX表单验证]: <input name="username" reg="正则" url="地址" tip="用户名的格式应该为XXXX"/>

    5. 扩展函数表单验证(某些业务特殊需求):

        这些特殊需求都是根据业务来的,这里列举一下这样的情况:
        1.checkbox选择框数量验证,如限制别人至少选择1个,最多选择5个checkbox。
        2.多个表单之间进行比较,如【开始时间表单】一定小于等于【结束时间表单】或者两个密码表单要相等,用于注册的时候,等等。

    由于这种情况的特殊性,所以用户得自己写业务逻辑代码,官方已经提供了extendsValidate扩展函数,在里面写自己的逻辑代码即可。

    扩展函数表单验证DEMO:http://easyvalidator.googlecode.com/svn/trunk/extends_demo.html

    BUG修复日志:

    2010-9-24 : 修复同一页多个FORM提交BUG ,TIP错位BUG
    2010-9-26 : 新增bgiframe插件, 修复IE6下TIP 遮罩不了 SELECT表单
    2010-9-27 :增加扩展API,并重构核心库

    DEMO中已经包含了常用的验证正则表达式,可以直接复用!

    下载最新版
    http://code.google.com/p/easyvalidator/downloads/list
  2. A
    谢谢分享

现在表单验证用什么技术比较流行啊?

  1. Q
    如题,现在表单验证一般用什么技术?能让服务器负担比较小,而且对出错的提示界面友好且简介。[size=medium][/size]
    问题补充:suziwen 写道表单验证一般客户端与服务端都要验证才能保证基本的数据正确,

    我用过的有:struts validator
    该框架可以同时生成服务端的验证与客户端的验证,
    一般的验证内容可以満足。也可以自己支继承代码扩展验证。
    不过错误后返回的界面还得用户自己美化。


    当然现有JQUERY已经有很多客户端的验证插件了,在界面美化上做得也很不错
    如jquery 的formvalidate


    http://www.position-relative.net/creation/formValidator/

    还有个这个
    http://jquery.bassistance.de/validate/demo/
    谢了啊,采用了
  2. A
    表单验证一般客户端与服务端都要验证才能保证基本的数据正确,

    我用过的有:struts validator
    该框架可以同时生成服务端的验证与客户端的验证,
    一般的验证内容可以満足。也可以自己支继承代码扩展验证。
    不过错误后返回的界面还得用户自己美化。


    当然现有JQUERY已经有很多客户端的验证插件了,在界面美化上做得也很不错
    如jquery 的formvalidate


    http://www.position-relative.net/creation/formValidator/

    还有个这个
    http://jquery.bassistance.de/validate/demo/

struts2表单验证 jsp页面显示不了错误信息

  1. Q
    目前正在用struts2创建项目  为了减小代码的耦合度 使bean类更纯粹点 在表单验证这一块  我另外写了一个类 然后用模型驱动(ModelDriven) 再重写validate方法
    package com.pp.action.login;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import com.pp.bean.Login;
    
    public class myvalidation extends ActionSupport implements ModelDriven<Login>
    {
    	private Login login = new Login();
    	private String mailname;
    	private String username;
    	private String password;
    	
    	public Login getModel()
    	{
    		return login;
    	}
    	@Override
    	public void validate()
    	{
    //		System.out.println("validate");
    //		mailname = login.getMailname().trim();
    //		username = login.getUsername().trim();
    //		password = login.getPassword().trim();
    //		System.out.println("mail"+mailname);
    //		System.out.println("username---"+username);
    //		System.out.println("password---"+password);
    		if(login.getMailname().equals(""))
    		{
    			this.addFieldError("mailname","mail name should not be blank!");
    			System.out.println("mail validate");
    			//this.addActionError("mailname should not be blank!");
    		}
    		
    		if(login.getMailname().length()<1)
    		{
    			this.addFieldError("mailname","length error");
    			System.out.println("mail length validate");
    			//this.addActionError("length error");
    			
    		}
    		
    		if(login.getUsername().equals("") || login.getUsername().length()<6 || login.getUsername().length()>12)
    		{
    			this.addFieldError("username","username should not be blank!");
    			System.out.println("username validate");
    			//this.addActionError("username should bot be blank");
    		}
    		
    		if(login.getPassword().equals(""))
    		{
    			this.addFieldError("password","fill your password");
    			System.out.println("password validate");
    			//this.addActionError("fill your password");
    		}
    	}
        
    	
    	@Override
    	public String execute() throws Exception
    	{
    		
    		return SUCCESS;
    	}
    	
    	
    	
    	
    }
    
    

    后台都有显示mail validate username validate等输出信息  说明有进入判断条件  但是在JSP页面就是显示不出来错误信息
    reg.jsp页面在form表单之前也有加FieldError的标签:
    <body> 
      <s:fielderror></s:fielderror>
      
    
      <s:form action="login2">
        <!-- 
        <s:label name="label" value="输入你的常用邮箱,用于登录"></s:label>
        <s:label name="label" value="用户名只能由字母、下划线、数字组成"></s:label>
      	<s:label name="label" value="密码6——12位组成"></s:label>
        
        
         -->
        
      	<s:textfield name="mailname" label="邮箱"></s:textfield>
      	
      	<s:textfield name="username" label="用户名"></s:textfield>
      	
      	<s:textfield name="password" label="密码"/>
      	<s:submit name="submit" ></s:submit>
      </s:form>
        <br>
      </body>
    


    acton如下,用的是login2来处理表单:
    <include file="struts-default.xml" />
    
    	<package name="tutorial" extends="struts-default">
    		<action name="login"  class="com.pp.action.login.checklogin">
    			<result name="success">success.jsp</result>
    			<result name="error">error.jsp</result>
    			<result name="login">login.jsp</result>
    		</action>
    		<action name="login2" class="com.pp.action.login.myvalidation">
    			<result>success.jsp</result>
    			<result name="input">reg.jsp</result>
    		</action>
    	</package>
    <!--
    	<action name="login2" class="com.pp.action.login.myvalidation">
    	<action name="login2" class="com.pp.bean.Login">
      -->
    </struts>
    

    到底是什么问题   希望各位帮忙看下   非常感谢。。。 
    问题补充:
    Login类是另外写的  然后为用模型驱动ModelDriven<Login>  其中有个getModel()方法重载Login的javaBean类
    首先我想说  struts2的表单验证是不是有两种:一是直接override validate方法;二是直接对Action处理类配置xml文件   不是吗
    问题补充:
    wocsok (中级程序员)说得不对  既然是使用ModelDriven,它的作用就像是在Myvalidation里面写了Login类的getXX和setXX方法作用是一样的。
    我的问题是在原先的Login里面的validate()方法没注释掉,然后两个validate()方法冲突了,只要把Login里面的validate注释掉就OK了
  2. A
    嗯  我说错了   我以前自己弄的时候 经常用XML配置文件  好久不弄WEB了 一看 也没经过大脑思考 就乱来一句   对不起哦    
    然后是
    我对你的问题的见解是这样的  eg:this.addFieldError("mailname","mail name should not be blank!");   这句话struts2 是通过获得第一个参数的值 来传递给表单的  你把内几个域 写上set get方法 在实验下  在你的action中 这个login仿佛只是起到了 逻辑判断的作用啊

关于CI表单验证类

  1. Q
    我在写代码的时候遇到一个问题,$this->form_validation->run() == FALSE不能正常工作。我运行CodeIgniter用户指南版本2.1.0表单验证详解中的例子也是不行呢?哪位大哥大姐给指点下,多谢!
  2. A
    表单验证类是垃圾

struts2声明式表单验证错误信息没有回显

  1. Q
    我今天试了试struts2声明式表单验证,可是没有错误信息回显。是我的哪里错误了呢?谢谢大家帮忙。
    命令台输出了这样的信息:
    2010-5-24 9:50:34 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
    严重: Validation error for age:年龄必须在13-20
    感觉验证是执行了,可是我的form_validation.jsp页面没有显示验证错误的信息。
    我的配置如下:

    //ValidationAction.java
    public class ValidationAction {

    private String msg;
    private int age;

    public String getMsg() {
    return msg;
    }

    public void setMsg(String msg) {
    this.msg = msg;
    }

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }

    public String execute() {
    return "success";
    }
    }

    //form_validation.jsp
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
        <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>表单验证测试</title>
    </head>
    <body>
    <s:form action="validationAction">
    <s:fielderror></s:fielderror>
    <s:textfield name="msg" label="消息"></s:textfield>
    <s:textfield name="age" label="年龄"></s:textfield>
    <s:submit></s:submit>
    </s:form>
    </body>
    </html>

    //ValidationAction-validation.xml 放在了ValidationAction.java的包下面(和ValidationAction.java)在同一个包里
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE validators PUBLIC "-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
    <validators>
    <field name="msg">
    <field-validator type="requiredstring">
    <message>请输入信息</message>
    </field-validator>
    </field>
    <field name="age">
    <field-validator type="int">
    <param name="min">13</param>
    <param name="max">20</param>
    <message>年龄必须在13-20</message>
    </field-validator>
    </field>
    </validators>

    //struts.xml
    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

    <struts>
       <package name="login" extends="struts-default">
      <action name="validationAction" class="com.validation.ValidationAction">
       <result name="success">/validation/form_validation.jsp</result>
       <result name="input">/validation/form_validation.jsp</result>
       </action>
       </package>
    </struts>

    问题补充:myali88 写道好郁闷了,[url]http://www.opensymphony.com [/url]访问不了,validation根本就不起作用。
    这两个有关系吗??
    问题补充:算了,我还是用编程式验证了,this.addFieldError(...),我太执着了。
  2. A
    我也遇到过,不过我在后台把错误信息传给一个变量,然后把变量传给前台显示!

jsp中采用form表单验证 一直失败

  1. Q
      各位高手好,小弟在jsp登陆页面中采用form表单验证,并且在tomcat的tomcat-uers.xml文件中进行了用户和角色的配置,根据自己在tomcat-users.xml文件中设置的user和password登陆,但是一直失败。
      想问问各位还需配置哪些地方,殷切等待中……
    问题补充:xiaolongfeixiang 写道你的Form是如何写的?
    <form method="POST"  action="j_security_check">
    
    <table border="0"><tr>
    <td>Enter the username: </td><td>
    
    <input type="text" name="j_username" size="15">
    
    </td>
    </tr>
    <tr>
    <td>Enter the password: </td><td>
    
    <input type="password" name="j_password" size="15">
    
    </td>
    </tr>
    <tr>
    <td> <input type="submit" value="Submit"> </td>
    </tr>
    </table>
    
    </form>




    跟你的是一样的,大哥

    问题补充:xiaolongfeixiang 写道web.xml的配置呢?


    在工程的web.xml文件中配置如下:
    <login-config>
      <auth-method>FORM</auth-method>
      <form-login-config>
        <form-login-page>/jsp/login.jsp</form-login-page>
        <form-error-page>/jsp/login-error.jsp</form-error-page>
      </form-login-config>
    </login-config>

    <security-constraint>
      <web-resource-collection>
        <web-resource-name>page</web-resource-name>
        <url-pattern>/jsp/page.jsp</url-pattern>
      </web-resource-collection>
      <auth-constraint>
        <role-name>liudan</role-name>
      </auth-constraint>
    </security-constraint>

    请大哥帮我找找有什么问题,不甚感激
    问题补充:xiaolongfeixiang 写道

    我按照上述的配置,测试成功!

    请检查以下几点:

    1、tomcat的tomcat-users.xml中配置是否正确?

    2、Form表单的action、name字段是否正确?

    3、web.xml中的角色是否配置正确?




    嗯,我回头再去测试一下,看是不是这几块出了问题
  2. A


    我按照上述的配置,测试成功!

    请检查以下几点:

    1、tomcat的tomcat-users.xml中配置是否正确?

    2、Form表单的action、name字段是否正确?

    3、web.xml中的角色是否配置正确?

Extjs表单验证,问题,如何条件限定表单验证?

  1. Q

    //vTypes定义如下:岁数,在0 - 200之间必须是数字
    Ext.apply(Ext.form.VTypes,{

    'age' : function( _v ){
    if( /^\d$/.test(_v) ){
    var _age = parseInt(_v);
    if( _age < 200 ){
    return true ;
    }
    }
    return false;
    },

    'ageText' : "年龄值必须在[ 0 ~ 200 ]范围 间!" ,

    'ageMask' : /[0-9]/i  //只允许输入0-9间的数字

    });

    //在FormPanel中的age域中引用该vType类型
    items       : [{
    fieldLabel : '姓名',
    name       : 'name',
    allowBlank : false ,         //不允许为空
    blankText  : "姓名不能为空"   //错误提示信息,默认为This field is required!

    },{
    fieldLabel : '年龄',
    vtype      : 'age' ,
    name       : 'age'
      }]
     

    //提供对FormPanel中各个域的值的重置功能
    reset : function(){

    this.getForm().reset();
    }

    问题:点击重置时,由于表单验证未通过返回了false,重置未生效

    截图如下:

    见附件 tw1.bmp

    请指点!

     

  2. A
    这个不需要定义vtypes呀..你直接使用 NumberField就可以了

    设定

    {
      xtype:'numberfield',
      allowDecimals:false,
      maxValue:200,
      minValue:0
    }

    换成这种看看

急。。。。。。关于sharepoint表单验证的问题

  1. Q
    想做个表单验证,但不知道为什么没有办法建立AspNetDb数据库,
    在Visual Studio 2005命令提示中执行asp_regsql –A all –E
    提示:
    'asp_regsql' is not recognized as an internal or external command,
    operable program or batch file.
    搜索了所有的驱动器发现竟然没有'asp_regsql'这个文件!
    是不是我的VS有问题啊?
  2. A
    因该是aspnet_regsql