EXT 提示信息求助(下面allowBlank中信息不能显示出来
注意哦,你的blankText 属性设置的控件是 label,
label组件就是单纯的显示一行字,验证的时候label是不会显示blankText的信息的,何况你的label也不是空的你给他设置了text是”部门“。
如果部门是手填写的可以用以下代码替换
xtype : "textfield",
fieldLabel : "部门:",
style : "padding:0px 0px 0px 0px;",
allowBlank : false,
blankText:"部门名称不能为空!",
width : 100
如果部门是用你那个TreeSelector选择的话,
就要问这个控件的作者 ,好像这个控件是扩展出来的吧。
ext 中allowBlank:false 什么作用啊
这个很容易啊,这个一般是文本输入框的一个属性,allowBlank的意思是是否允许为空,这个属性帮你验证必输项的。会在表单提交时,自动帮你验证,该文本框是否输入了内容,如果没有输入则会标红提示。这个是Ext底层帮你封装好的方法,省去了你自己写js代码验证的麻烦。
设置为flase,则代表 不允许为空,也就是说该文本框输入时不能为空。反过来true则代表允许为空,那么Ext底层就去验证是否必输了。
php 编写 实现上传图片至服务器的函数
$val){ $key = strtolower($key); //查看用户参数中的数组下标是否和成员属性名相同 //get_class_vars(get_class($this))得到类属性的数组 //如果$key下标不在这个类属性的数组中,则退出for循环 if (!in_array($key,get_class_vars(get_class($this)))){ continue; } $this -> setOption($key,$val); } } private function setOption($key,$val){ //让实例化后获取过来的数组下标 = 数组下标的值,这里即为构造函数初始化 //构造函数中调用,等于把所有属性初始化,将来可以直接访问 $this -> $key=$val; } private function getError(){ $str="上传文件{$this->originName}时出错"; switch($this -> errorNum){ case 4: $str.="没有文件被上传"; break; case 3: $str.="文件只有部分上传"; break; case 2: $str.="上传文件超过了表单的值"; break; case 1: $str.="上传文件超过phpini的值"; break; case -1: $str.="未允许的类型"; break; case -2: $str.="文件过大上传文件不能超过{$this->maxsize}字节"; break; case -3: $str.="上传文件失败"; break; case -4: $str.="建立存放上传文件目录失效,请重新上传指定目录"; break; case -5: $str.="必须指定上传文件的路径"; break; default: $str.="未知错误"; } return $str.''; } //用来检查文件上传路径 private function checkFilePath(){ if(empty($this -> filepath)){ $this -> setOption("errorNum",-5); return false; } if(!file_exists($this -> filepath) || !is_writable($this -> filepath)){ if(!@mkdir($this -> filepath,0755)){ $this -> setOption("errorNum",-4); return false; } } return true; } //用来检查上传文件尺寸大小 private function checkFileSize(){ if($this -> fileSize > $this ->maxsize){ $this -> setOption("errorNum",-2); return false; }else{ return true; } } //用来检查文件上传类型 private function checkFileType(){ if(in_array(strtolower($this->fileType),$this -> allowtype)){ return true; }else{ //如果$this->fileType这个类型 不在$this -> allowtype这个数组中,则把错误号变成-1 $this -> setOption("errorNum",-1); return false; } } private function setNewFileName(){ if($this -> israndname){ $this -> setOption("newFileName",$this->preRandName()); }else{ $this -> setOption("newFileName",$this -> originName); } } //用于检查文件随机文件名 private function preRandName(){ $fileName=date("Ymdhis").rand(100,999); return $fileName.".".$this -> fileType; } //用来上传一个文件 function uploadFile($fileField){ //检查文件路径 $return = true; if(!$this -> checkFilePath()){ $this -> errorMess=$this -> getError(); return false; }//获取文件信息 $name = $_FILES[$fileField]['name']; $tmp_name = $_FILES[$fileField]['tmp_name']; $size = $_FILES[$fileField]['size']; $error = $_FILES[$fileField]['error']; if(is_array($name)){//判断获取过来的文件名字是否为数组 $errors=array();//如果为数组则设置为一个数组错误号 for($i=0;$isetFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){ if(!$this->checkFileSize() || !$this->checkFileType()){ //如果上面尺寸或者类型不对,则调用这个错误信息 $errors[$i]=$this->getError(); $return=false; } }else{ //这里是 $error[]=$this->getError(); $return=false; } if(!$return) $this->setFiles(); } if($return){ $fileNames=array(); for($i=0;$isetFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){ $this->setNewFileName(); if(!$this->copyFile()){ $errors=$this->getError(); $return=false; }else{ $fileNames[$i]=$this->newFileName; } } } $this->newFileName=$fileNames; } $this->errorMess=$errors; return $return; }else{ //看看$name,$tmp_name,$size,$error这些是否赋值成功 否则返回FALSE if($this -> setFiles($name,$tmp_name,$size,$error)){ //看看文件大小尺寸是否匹配,不匹配返回FALSE if($this -> checkFileSize() && $this -> checkFileType()){ //获取新文件名 $this->setNewFileName(); if($this->copyFile()){ return true; }else{ return false; } }else{ $return=false; } }else{ $return=false; } if(!$return){ $this -> errorMess = $this ->getError(); return $return; }} } function copyFile(){//将文件从临时目录拷贝到目标文件夹 if(!$this->errorNum){ //如果传递来的路径有斜杠,则删除斜杠再加上斜杠 //./upload+./ $filepath=rtrim($this->filepath,'/').'/'; //./upload+./+加上随机后的新文件名和后缀 //这里指创建一个新的$filepath.这个文件 像占位符但是为空的 $filepath.=$this->newFileName; //尝试着把临时文件$this->tmpFileName移动到$filepath下哪里覆盖原来的这个文件 if(@move_uploaded_file($this->tmpFileName,$filepath)){ return true; }else{ $this->setOption('errorNum',-3); return false; } }else{ return false; } } //这里是为了其他剩余的属性进行初始化操作! private function setFiles($name="",$tmp_name="",$size=0,$error=0){ //这里给错误号赋值 $this -> setOption("errorNum",$error); //如果这里有错误,直接返回错误 if ($error){ return false; } $this -> setOption("originName",$name);//复制名字为源文件名 $this -> setOption("tmpFileName",$tmp_name); $arrstr = explode(".",$name);//按点分割文件名, //取分割后的字符串数组最后一个 并转换为小写,赋值为文件类型 $this -> setOption("fileType",strtolower($arrstr[count($arrstr)-1])); $this -> setOption("fileSize",$size); return true; } //用来获取上传后的文件名 function getNewFileName(){ return $this -> newFileName; } //上传失败,后则返回这个方法,就可以产看报告 function getErrorMsg(){ return $this -> errorMess; } }?>============================调用===================================='true',"filepath"=>"./upload/",'allowtype'=>array('txt','doc','jpg','gif'),"maxsize"=>1000000)); echo ''; if($up -> uploadFile("pic")){ print_r($up -> getNewFileName()); } else{ print_r($up -> getErrorMsg()); } echo '';?>-------------------HTML------------------------- shoppic: -------------------或者HTML------------------------- //区别在这里 shoppic:shoppic:shoppic: =====================================================================以上是自己总结的 还没有怎么精简加工过,仅供参考以上不止可以上传图片,可以上自定义任何文件
用php如何把一些文件和图片上传到另一指定的服务器
一个实例:
首先,在自己台式机和笔记本上都开通了ftp,这个不会的同学可以网上查serv-u,相关教程肯定不少的。
然后在台式机本地做了个测试:
$ftp_server = "192.168.1.100";
$ftp_user_name = "laohu";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = 'test.txt';
$remote_file = '/test/a.txt';
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件移动成功\n";
} else {
echo "移动失败\n";
}
ftp_close($conn_id);
运行后:文件移动成功。
要的就是这个效果了,之后用台式机做程序服务器,上传附件时全用ftp方法上传至笔记本上,笔记本ip是105,相应代码如下:
if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) {
$ftp_server = "192.168.1.105";
$ftp_user_name = "lesley";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = $_FILES['uploadfile']['tmp_name'];
$remote_file = '/test/'.$_FILES['uploadfile']['name'];
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件:".$_FILES['uploadfile']['name']."上传成功\n";
} else {
echo "上传失败\n";
}
ftp_close($conn_id);
}
对应的前台页面代码:
运行后确实成功。
需要注意:
在用ftp_put方法时,第四个参数传送模式,需要用FTP_BINARY(二进制模式),用FTP_ASCII(文本模式)时,图片能上传但无法显示,其他文件重命名、中文乱码解决、上传权限控制等,就不在此提及了。
怎么使用EXTJS 实现点击一个按键然后弹出一个窗口,并且在弹出窗口时能发送请求到服务器然后接受
var form_panel= new Ext.FormPanel( { split : false, labelWidth : 80, frame : true, width : 275, 。。。。。。。。 var win = new Ext.Window( { title : '登录', width : 340, height : 230, layout : "fit", plain : true, modal : true, closeAction : "hide", items : [ form_panel] }); win.show(); form_panel你自己完善,或者网上随便找个然后自己找个button,实现一下click事件,然后调用win.show()就能弹窗了然后在调用弹窗的后面,写个ajax调用一下后台最后获取完json,赋值到from表单就可以了 具体用到的函数,详查api
jsp页面有一个table表格,每一行最后都有一个编辑按钮,点击按钮弹出div框,并显示该行的信息,怎么做?
selectjsp,在addjsp上面有一个请选择按钮,点击请选择按钮后,弹出selectjsp页面,这个页面上是从数据库中遍历的企业,选中一条数据,点击确认,selectjsp页面关闭,并将结果带到addjsp请选择前面的文本框里面。但name里的对象里要包含一个list,一般像你这种table的在后台肯定返回的是list集合把,所以用logic标签循环显示就行的 。<logiciterate id这里的名字是随意 只是在下面调用而已aList name后台返回给前台的对象比如page propertylist这里必须是list因为表示循环对象是list集合类型的indexId,indx>。<tr class=ChangeLineColor height20>。<td align=center><%=indx+1%></td>。<td>,aList.productCode<,td>,alist。要的字段名字。<td>,aList.fstCustomerName<,td>。至于你是返回的直接是一个对象包含list集合的还是直接一个list,看你自己情况,改就行的。
extjs gridpanel 如何合并单元格
columns:[{ text:'本系统', defaults:{ style:"text-align:center" }, menuDisabled:true, sortable:false, columns:[{ xtype:'rownumberer', width:40 },{ text:'借方余额(元)', dataIndex:'' },{ text:'贷方余额(元)', dataIndex:'productCode' } ] },{ text:'本系统', defaults:{ style:"text-align:center" }, menuDisabled:true, sortable:false, columns:[{ xtype:'rownumberer', width:40 },{ text:'借方余额(元)', dataIndex:'' },{ text:'贷方余额(元)', dataIndex:'productCode' } ] },{ text:'本系统', defaults:{ style:"text-align:center" }, menuDisabled:true, sortable:false, columns:[{ xtype:'rownumberer', width:40 },{ text:'借方余额(元)', dataIndex:'' },{ text:'贷方余额(元)', dataIndex:'productCode' } ] },{ text:'本系统', defaults:{ style:"text-align:center" }, menuDisabled:true, sortable:false, columns:[{ xtype:'rownumberer', width:40 },{ text:'借方余额(元)', dataIndex:'' },{ text:'贷方余额(元)', dataIndex:'productCode' } ] }]
extjs grid 怎样合并单元格?
具体步骤如下:
/*
这个方法四个参数分别是
row:合并起始行
col:合并起始列.这两个参数是为了定位,要从哪个单元格开始合并.
type:是要合并行或者列.
num:是要合并的数量
//==>监听load , 执行合并单元格
grid.getStore().on('load', function () {
span(grid, 0, 0, 'row', 5);
});
*/
var span = function (grid, row, col, type, num) {
switch (type) {
case 'row':
tds = Ext.get(grid.view.getNode(row)).query('td');
Ext.get(tds[col]).set({ rowspan: num });
Ext.get(Ext.get(tds[col])).setStyle({ 'vertical-align': 'middle' });
for (i = row + 1; i < row + num; i++) {
Ext.get(Ext.get(grid.view.getNode(i)).query('td')[col]).destroy();
}
break;
case 'col':
tds = Ext.get(grid.view.lockedView.getNode(row)).query('td');
Ext.get(tds[col]).set({ colspan: num });
break;
}
};