当前位置: 编程技术>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网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!