当前位置: 编程技术>WEB前端
本页文章导读:
▪Jquery 仿新浪微博获取文本框能输入的字数 limit.js代码
//txt:文本框jquery对象
//limit:限制的字数
//isbyte:true:视limit为字节数;false:视limit为字符数
//cb:回调函数,参数为可输入的字数
function InitLimit(txt,limit,isbyte,cb){
txt.keyup(function(){
.........
▪文件上传工具 今天用PHP做了个文件上传工具,功能还是很完善滴,如下:
每个图片上传之后,都有自己的地址,改变原图位置或重命名时,将不会重复上传。
一、功能:
A:文件分类上传
B:生成相应的.........
▪struts静态动态ActionForm使用(二)—验证
这篇博客主要介绍使用struts框架常用的验证方式。
第一种:重写ActionForm的validate方法。
在actionForm中需要验证的都是表单的验证而非.........
[1]Jquery 仿新浪微博获取文本框能输入的字数
来源: 互联网 发布时间: 2013-11-06
limit.js代码
页面代码:
效果图:
//txt:文本框jquery对象 //limit:限制的字数 //isbyte:true:视limit为字节数;false:视limit为字符数 //cb:回调函数,参数为可输入的字数 function InitLimit(txt,limit,isbyte,cb){ txt.keyup(function(){ var str=txt.val(); var charLen; var byteLen=0; if(isbyte){//原文博客:blog.csdn.net/bluceyoung for(var i=0;i<str.length;i++){ if(str.charCodeAt(i)>255){ byteLen+=2; }else{ byteLen++; } } charLen = Math.floor((limit-byteLen)/2); }else{ byteLen=str.length; charLen=limit-byteLen; } cb(charLen); }); }
页面代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <script src=/blog_article/"http_/code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"> </script> <script type="text/javascript" src=/blog_article/"limit.js"></script>/index.html <script type="text/javascript"> $(document).ready(function(){ InitLimit($("#txt"),10,true,function(c){ if(c>=0){ $("#show").val("还能输入"+c+"个字"); }else{ $("#show").val("已经超过"+(-c)+"个字"); } }); InitLimit($("#txt1"),10,true,function(c){ if(c>=0){ $("#show1").val("还能输入"+c+"个字"); }else{ $("#show1").val("已经超过"+(-c)+"个字"); } }); }); </script> </head> <body> <input type="text" id="txt"/><input id="show" type="text"/><br/> <input type="text" id="txt1"/><input id="show1" type="text"/> </body> </html>
效果图:
作者:bluceyoung 发表于2013-2-19 11:46:36 原文链接
阅读:0 评论:0 查看评论
[2]文件上传工具
来源: 互联网 发布时间: 2013-11-06
今天用PHP做了个文件上传工具,功能还是很完善滴,如下:
每个图片上传之后,都有自己的地址,改变原图位置或重命名时,将不会重复上传。
一、功能:
A:文件分类上传
B:生成相应的文件夹,如本例,选择团,生成文件夹tuan
C:点击图片,查看详细
二、HTML代码:
<div id="container"> <fieldset> <legend class="img"><img width="100%" src=/blog_article/"css/logo.png /></legend> <form action="" method="post" name="myform" id="myform" onsubmit="return false" enctype="multipart/form-data"> <strong>亲,请选择你要上传的文件</strong> <div class="file"><input type="file" id="fileToUpload" name="fileToUpload" /></div> <select id="product"> <option value="" <?php if(empty($pname)){ echo "selected" ;} ?> >请选择产品</option> <option value="tuan" <?php if($pname == '2000tuan'){ echo "selected" ;} ?> >团</option> </select> <button id="postBtn" >Submit</button> </form> <div id="info"></div> <div style="position:relative; top:40px; left:20px;"> <a id="loading" style="display:none"><img width="10%" src=/blog_article/"css/loading.gif /></a> </div> <a href=/blog_article/"/index.html id="img_link" target="_blank"> <div id="img_url">buding</div> <br/> <img class="preview" id="preview" src=/blog_article/""/index.html style="display:none;margin:0 auto" /> </a> </fieldset> </div>
三、Javascript代码:
<script type="text/javascript"> $('#postBtn').click(function(){ $('#preview').hide(); $('#img_url').hide(); $('#loading') .ajaxStart(function(){ $(this).show(); }) .ajaxComplete(function(){ $(this).hide(); }); if($('#fileToUpload').val() == ""){ $('#info').html("亲,还没选择文件呢"); var jObject={"Url":"","Height":413}; var jString=JSON.stringify(jObject); window.parent.postMessage(jString,'*'); return false; } if($('#product').val() == ""){ $('#info').html("亲,还没选择产品呢"); $('#info').css("color","#e9af32"); var jObject={"Url":"","Height":413}; var jString=JSON.stringify(jObject); window.parent.postMessage(jString,'*'); return false; } var val = $('#product').val(); $.ajaxFileUpload({ url:'ajaxupload.php', secureuri:false, fileElementId:'fileToUpload', dataType: 'text', data:{product:val}, success: function (data, status) { if(data.search(/http:\/\//i) < 0 ){ $('#info').html(data); var jObject={"Url":"","Height":413}; var jString=JSON.stringify(jObject); window.parent.postMessage(jString,'*'); }else{ $('#info').html("您上传的文件为:<br/>"); $('#preview').attr("src",data); $('#img_link').attr("href",data); $('#img_url').html(data); $('#preview').show(); $('#img_url').show(); $('#preview').load(function(){ var imgH=$('#preview').height(); var jObject={"Url":data,"Height":imgH+228,"oid":"<?php echo @$_REQUEST['oid']; ?>"}; var jString=JSON.stringify(jObject); window.parent.postMessage(jString,'*'); }); } }, error: function (data, status, e){ $('#info').html(data+e); } }); }); </script>
四、PHP代码
<?php require_once('config.php'); if(empty($_FILES) || empty($_REQUEST)){ header('location:imgupload.php'); exit; } array_push($_FILES, $_REQUEST); $filename = 'fileToUpload'; $product = @$_FILES[0]['product']; $today = date("Y-m-d"); $time = date("YmdHis"); $year = date("Y"); $month = date("m"); $day = date("d"); $img_path = $product.'/'.$year.'/'.$month.'/'.$day.'/'; $destination_dir = ROOT_PATH.'/pic/'.$img_path.'/'; if(!is_uploaded_file($_FILES[$filename]['tmp_name'])){//验证上传文件是否存在 echo "请选择你想要上传的图片"; exit; } if($product == "") {//选择产品 echo "请选择产品"; exit; } $files = $_FILES[$filename]; if($max_file_size < $files['size']){//判断文件是否超过限制大小 echo "图片太大了,传个小点的吧(<=2MB)"; exit; } if(!file_exists($destination_dir)) {//判断上传目录是否存在,不存在则创建一个. if(!mkdir($destination_dir,0777,true)) { echo "创建目录 {".$destination_dir."} 失败<可能是权限问题>"; exit; } } $type = pathinfo($files['name']); $type = strtolower($type["extension"]); $type =".".$type; $tmp_name = $files['tmp_name']; $md5file = md5_file($tmp_name);//生成md5文件 $new_name =$md5file.$type; $img_relat_path = $img_path.$new_name; $img_abs_path = $destination_dir.$new_name; $url = IMG_URL.$img_relat_path; //判断数据库中图片是否存在 $sql="select url from file_url where md5 = '".$md5file."'"; $res=$db->getOne($sql); if($res) { echo $res['url']; exit; } if(!move_uploaded_file ($files['tmp_name'], $img_abs_path)) {//上传文件 echo "上传文件失败"; exit; } //将图片存入数据库 $sql="insert into file_url(/blog_article/url,product,md5,create_time/index.html) values('".$url."','".$product."','".$md5file."','".$today."')"; $db->Execute($sql); $db->CloseDB(); echo $url; ?>
作者:liushuwei0224 发表于2013-2-19 13:11:52 原文链接
阅读:13 评论:0 查看评论
[3]struts静态动态ActionForm使用(二)—验证
来源: 互联网 发布时间: 2013-11-06
这篇博客主要介绍使用struts框架常用的验证方式。
代码解释:
其中为了把错误显示出来,我们使用资源文件方式。
其中日期验证的测试 问题总结。
第一种:重写ActionForm的validate方法。
在actionForm中需要验证的都是表单的验证而非业务的验证。比如用户名非空,密码为数字,日期为时间格式等等。在validate方法中,返回ActionErrors信息,然后在错误页打印错误信息。
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors=new ActionErrors(); if(username==null||"".equals(username)){ errors.add(username, new ActionMessage("error.username",username)); } if(password==null || "".equals(password)){ errors.add("password",new ActionMessage("error.password",password)); } if(!(birthday instanceof Date)){ errors.add("birthday",new ActionMessage("error.birthday",birthday)); } return errors; }
代码解释:
使用这种ActionForm再带的验证方式,在配置文件中需要设置此action的validate属性为true,并且也要设置出现错误返回的错误页input属性。
struts-config.xml中action的配置如下:
<action-mappings> <action path="/login" type="com.login.LoginAction" name="loginForm" scope="request" input="/login/error.jsp" validate="true"> <forward name="success" path="/login/success.jsp"></forward> <forward name="false" path="/login/false.jsp"></forward> </action> </action-mappings>
其中为了把错误显示出来,我们使用资源文件方式。
在validate方法中,new ActionMessage("error.birthday",birthday)中的"error.birthday"是资源文件的key值。
配置文件中加载资源文件:
<!-- 加载资源文件 --> <message-resources parameter="MessageResources" />
注意资源文件放在src下。若是放在WebContent目录或web-inf下,则不会提示相应的错误信息。即使不报错。
并且上述的日期,其中使用Register注册了,上篇博客已经介绍,在此不再过多介绍。
这个action自带的验证的demo已经上传。点我下载。
第二种:使用validator框架。
其中validate验证,主要是由commons-validator.jar包。
那如何使用validator框架呢?
1.actionForm使用validator框架。
首先:编写actionForm
注意此时的actionForm不是继承ActionForm,而是继承ValidatorForm。
其中actionform中只有getset方法
其次:编写配置文件struts-config.xml中,加载验证插件以及使用资源文件。
<!-- 加载资源文件 --> <message-resources parameter="MessageResources" /> <!-- 验证插件 --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in>
其中,validator-rules.xml是公共的。而这个validation.xml是需要程序员编写。
然后:编写validation.xml验证信息。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <formset> <!-- form 的name必须与struts-config中名称一致 --> <form name="loginForm"> <field property="username" depends="required"> <!-- key值必须与资源文件中名称一致 --> <arg key="error.username"/> </field> <field property="password" depends="required"> <arg key="error.password"/> </field> <field property="birthday" depends="date"> <arg key="error.birthday"/> </field> </form> </formset> </form-validation>
formset可以包含多个form,并且form中需要验证的属性使用field标签。其中depends依赖验证规则的中的信息validator-rules.xml中的规则。比如:required,要求必填,date,日期格式,long,byte,mask正则等等。
其中的key值必须与资源文件的key一致。如第一种方法。
2.动态actionform使用validator框架。
动态的actionform在上篇博客已经介绍。在1的基础上,只改一下struts-config.xml配置文件中的动态actionform
<!-- 动态验证form --> <form-beans> <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="username" type="java.lang.String"></form-property> <form-property name="password" type="java.lang.String"></form-property> <form-property name="birthday" type="java.util.Date"></form-property> </form-bean> </form-beans>
其他的不用改变。
但是需要注意的是:使用validator框架的动态actionform的type类型是:DynaValidatorForm而不是DynaActionForm
3.应用在客户端,使用js提示。
在1的基础上只改一个login.jsp其他的不用改。
添加onsumit,并且添加个html:javascript标签
<html:javascript formName="loginForm"/> <html:form action="login.do" onsubmit="return validateLoginForm(this)"> username : <html:text property="username"/><br/> password : <html:password property="password"/><br> birthday: <html:text property="birthday"></html:text> <html:submit/> </html:form>
需要注意的是:其中action不能使用"../",否则提示错误。
并且并不是所有的服务器校验都可以转化成客户端的js提示,其中日期的合法性验证,就不能转化成客户端js提示。
其中日期验证的测试 问题总结。
上述的demo中测试日期,验证规则使用的date关键字
1.因为默认的是java.sql.Date,若代码中使用的java.util.Date的类型,但是没有注册register,即使使用默认的yyyy-MM-dd格式,则也会报错。
若是注册register,界面使用yyyy-MM-dd默认格式,则成功,如使用yyyy/MM/dd格式【自己手写的转换类的时间格式】,则提示validator验证失败。
2.若代码中使用的java.sql.Date类型。没有注册register,使用默认yyyy-MM-dd格式,则成功。界面输入yyyy/MM/dd格式,则不能验证,报错。
若注册register,界面输入yyyy/MM/dd格式,也不能验证,报错。
3.如果birthday的验证规则是requried,date,则出现的现象是:若注册了,并且时间转换类中是yyyy/MM/dd格式,若界面输入yyyy/MM/dd格式,则validator验证的日期不一致。若输入其他的格式,比如yyyy-MM-dd格式,则提示requried
作者:llhhyy1989 发表于2013-2-19 14:22:14 原文链接
最新技术文章:
 
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!