原创 Extjs ComboBox几个小问题- 不显示值.获取输入值

2010年8月11日 懒猫 1 条评论

     1:ComboBox加载数据之后,ComboBox里面的值跑位,不能正确对应到ComboBox里面。
原因:因为要传name的值到服务器端,使用到了隐藏属性hiddeName来传值,hiddenName的名是要和name一样的。如果id和name设置为相同的,就会不能正确对应。所以,comboBox的id和name 不能设置一样
new Ext.form.ComboBox({
id:”comboId”,
name:”comboName”,
hiddenName:”comboName”
});
阅读全文…

原创 js 屏蔽IE刷新

2010年8月3日 懒猫 没有评论

   以下代码是如何利用javascript 实现屏蔽F5,BackSpace,IE的刷新,右键,退格键。

    屏蔽F10、F11、   能支持IE 和 火狐,

阅读全文…

原创 我的三年也过了一半

2010年7月21日 懒猫 2 条评论

        今天看到一同事在说,从毕业到现在没想到已经过了三年了。时间确实过的好快,出来工作一眨眼也已有一年半了。。当时刚出来找工作的时候,没去一家公司面试,都会问到,你近三年的规划是怎么样的?其实当时也没有什么明确的规划,只是为了一份工作,也是冠冕堂皇的回答的这三年会怎么怎么样。每次都回答的一样,那就去理所当然的当做是这几年的目标吧、、、当是那样子的想着。可是当真正在工作的时候,却总是在为要去努力的东西找各种借口,到最后,却一个都没达到。

     我的三年也在朝九晚六的日子中过了一半,细想一下,至少有一年的时间真的混过去的,因为一个人负责的项目,又有很多的事情弄的很烦,就更加的纵容自己不去努力,不去学习。。一直到前两个月换了新的公司,才开始真正的学习,认真了两个月。

      三年的规划,剩下的一年半。。。

分类: 北漂工作 标签:

原创 GridPanel动态列

2010年7月13日 懒猫 3 条评论

     动态列的实现,关键点在于怎么在后台传送数据到前台,在前台如何去组装数据,组装列模型。在加载列数据的时候,是通过Ajax异步处理,那就是要先加载列头,然后再加载列值数据。那我们可以通过两个请求分别处理列头和列值,一个请求用来,从数据库将所有的列头信息返回。一个请求用来获得列值数据。得到的列头的信息也是通过Ajax返回到前台。

     阅读全文…

原创 Ext.form.formPanel 与服务器交互 初始化表单

2010年7月9日 懒猫 2 条评论

    formPanel 初始化表单有两种方式加载,一种是本地加载,一种是通过返回回来的Json格式数据加载到表单里面。
得到表单来加载数据的时候,必须用form.getForm(), 得到basicForm()这个对象,formPanel是继承自basciForm()
本地加载通过form.getForm.loadRecord() 加载,传入的一个记录集(new Ext.data.record.create())。 根据相应的映射会自动匹配到表单的每个文本框。
   比如,通过点击表格的编辑事件,得到表格记录的行数据。
var updateGrid = Ext.getCmp(“displayEmpGrid”);
var rows = updateGrid.getSelectionModel().getSelections();
if (rows) {
//for (var i = 0; i < rows.length; i++) {
alert(rows[0].imageUpload);
form.getForm().loadRecord(rows[0]); //将数据集加载到表单中,直接获取表格的数据
Ext.get(‘imageBrowse’).dom.src = “images/anniubg.gif”;
//}
}
   但是将所有的数据放到页面,然后从页面这样子加载,不太推荐,加载所有的数据到页面会加重页面负担。。

   远程加载是通过 form.getForm().load()加载。
// 解析后台返回的数据
form.getForm().reader = empReader;

// 从后台加载json格式数据
form.getForm().load({
url : “employee_selectByPrimaryEmployee.action”,     
method : “POST”,
params : {
empNo : empNo //参数
}
});

var empReader = new Ext.data.JsonReader              //解析Json格式数据。({                                                                                                                                                                                                                                                  

  name:”empNo “,

 mapping:”empNo”      //为json数据里面 对应的属性值 

},{name:”empName”, mapping:”empName”});

//json数据,即action中 selectByPrimaryEmployee 所要返回到页面的json数据格式 

var  json = [{empNo:"111",empName:"小王"}];

    printwrite.print(json);   //将数据返回到前台

   这样子就是通过将服务器数据加载到表单显示。一定要注意,加载本地和加载远程不要用错方法了,加载远程是用load(),里面传的url。 本地用 加载用loadRecord(),直接传入一个记录集,就可以加载进去。

分类: java日记 标签:

原创 Extjs 上传图片预览显示

2010年6月30日 懒猫 1 条评论

var fileForm = new Ext.form.FormPanel({
title : “”,
renderTo : “fileUpload”,
fileUpload : true,
layout : “form”,
id : “fileUploadForm”,
items : [{
id : ‘upload’,
name : ‘upload’,
inputType : “file”,
fieldLabel : ‘上传图片’,
xtype : ‘textfield’,
anchor : ‘40%’

阅读全文…

原创 Extjs + struts2 上传文件

2010年6月29日 懒猫 没有评论

     昨天一直在弄文件上传,之前没有太明白是文件上传是怎么回事,今天试验成功了,也有点了解了。也就是将本地文件通过http文件写入到服务器,通俗的讲就要上传就是直接文件将文件从一个位置拷贝一份到另外一个地方,而另外一个地方指的就是在服务器里面的一个文件里面。那就只要先获得目标文件的路径,wap下面的存文件的文件夹路径。然后再通过流输入到指定文件里面。

js 代码
Ext.onReady(function() {
var fileForm = new Ext.form.FormPanel({
title : “”,
renderTo : “fileUpload”,
fileUpload : true,
layout : “form”,
id : “fileUploadForm”,
items : [{
id : 'upload',
name : 'upload',
fieldLabel : "选择",
inputType : "file",
xtype : "field"
}],

buttons : [{
text : "提交",
name : "submit",
handler : submit
}]
});

});

function submit() {
Ext.getCmp(“fileUploadForm”).getForm().submit({

url : “uploadAction.action”,
method : “POST”,
success : function(form, action) {
alert(“success”);
},
failure : function(form, action) {
alert(“failure”);
}
});
}

action代码

package com.cocobra.action;

import java.io.*;
import java.util.Date;
import java.util.UUID;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private File upload;
 private String uploadContentType;
 //这里要注意一点,uploadFileName 中的 upload 要与传入过来的File名字一样,不然获取不到文件的名字,今天就因为这里不一致,找了一上午没找到原因
 private String uploadFileName;
 
 public File getUpload() {
  return upload;
 }

 public void setUpload(File upload) {
  this.upload = upload;
 }

 public String getUploadContentType() {
  return uploadContentType;
 }

 public void setUploadContentType(String uploadContentType) {
  this.uploadContentType = uploadContentType;
 }

 public String getUploadFileName() {
  return uploadFileName;
 }

 public void setUploadFileName(String uploadFileName) {
  this.uploadFileName = uploadFileName;
 }

 // 上传文件的文件名
 

// private String getFileExp(String name) {
//  int pos = name.lastIndexOf(“.”);
//
//  return name.substring(pos);
// }
 
 private static final int BUFFER_SIZE = 16 * 1024;
 
 public String execute() throws Exception{
 
  Date d = new Date();
  
  System.out.println(“uploadFileName = “+this.uploadFileName);  //要上传的文件名
  

//获得wapps的路径,uploader 指的放在文件的地方
  String toSrc = ServletActionContext.getServletContext().getRealPath(“uploader”)+”/”+uploadFileName;
 
  System.out.println(“toFile= “+toSrc);
  
  File toFile = new File(toSrc);
 
  
  writeFile(this.upload,toFile);
  
  return SUCCESS;
 }
 private static void writeFile(File src, File dst) {
  
  System.out.println(” == 文件寫入 == “);
  try {
   InputStream in = null;
   OutputStream out = null;
   try {
   
    in = new BufferedInputStream(new FileInputStream(src),   //获得要上传的文件
      BUFFER_SIZE);
    out = new BufferedOutputStream(new FileOutputStream(dst),  //指定要上传到的位置
      BUFFER_SIZE);
    byte[] buffer = new byte[BUFFER_SIZE];    

//开始写入
    while (in.read(buffer) > 0) {
     out.write(buffer);
    }
   } finally {
    if (null != in) {
     in.close();
    }
    if (null != out) {
     out.close();
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  
  System.out.println(“写入成功!”);
}
}

//struts2.xml 配置文件一段

<action name=”uploadAction” >
       <interceptor-ref name=”fileUpload”>
       <!–拦截器strut2自带的, 指定上传文件的格式,如果不符合规定,将会自动拦截下来 –>
    <param name=”allowedTypes”>image/bmp,image/png,image/gif,image/jpeg,image/jpg</param>
    <param name=”maximumSize”>20000000000</param>
   </interceptor-ref>
      <interceptor-ref name=”defaultStack” />
      <result name =”success” >/index.jsp</result >
  </action>

原创 MyEclipse7.5注册码 序列号 Java版注册机源代码

2010年6月25日 懒猫 没有评论

    下载 MyEclipse7.5后执行以下操作:

   1、建立java Project,任意取个名字就行。

   2、建立一个名字为MyEclipseGen的类文件,内容见附件。

   3、运行该代码,在控制台中会出现:

   please input register name:

   ×××××(你的name)

   即生成序列号:

   4、进入myeclipse,输入Subscriber和Subscription code即可。

   附件:

   import java.io.BufferedReader;

   import java.io.IOException;

   import java.io.InputStreamReader;

   public class MyEclipseGen {

   private static final String LL = “Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.”;

   public String getSerial(String userId, String licenseNum) {

   java.util.Calendar cal = java.util.Calendar.getInstance();

   cal.add(1, 3);

   cal.add(6, -1);

   java.text.NumberFormat nf = new java.text.DecimalFormat(“000″);

   licenseNum = nf.format(Integer.valueOf(licenseNum));

   String verTime = new StringBuilder(“-”).append(

   new java.text.SimpleDateFormat(“yyMMdd”).format(cal.getTime())).append(“0″).toString();

String type = “YE3MP-”;

String need = new StringBuilder(userId.substring(0, 1)).append(type)

.append(“300″).append(licenseNum).append(verTime).toString();

String dx = new StringBuilder(need).append(LL).append(userId)

.toString();

int suf = this.decode(dx);

String code = new StringBuilder(need).append(String.valueOf(suf))

.toString();

return this.change(code);

}

private int decode(String s) {

int i;

char[] ac;

int j;

int k;

i = 0;

ac = s.toCharArray();

j = 0;

k = ac.length;

while (j < k) {

i = (31 * i) + ac[j];

j++;

}

return Math.abs(i);

}

private String change(String s) {

byte[] abyte0;

char[] ac;

int i;

int k;

int j;

abyte0 = s.getBytes();

ac = new char[s.length()];

i = 0;

k = abyte0.length;

while (i = 48) && (j = 65) && (j = 97) && (j <= 122)) {

j = (((j – 97) + 13) % 26) + 97;

}

ac[i] = (char) j;

i++;

}

return String.valueOf(ac);

}

public MyEclipseGen() {

super();

}

public static void main(String[] args) {

try {

System.out.println(“please input register name:”);

BufferedReader reader = new BufferedReader(new InputStreamReader(

System.in));

String userId = null;

userId = reader.readLine();

MyEclipseGen myeclipsegen = new MyEclipseGen();

String res = myeclipsegen.getSerial(userId, “5″);

System.out.println(“Serial:” + res);

reader.readLine();

} catch (IOException ex) {

}

}

}

我运行后的结果:

please input register name:

selina

Serial:fLR8ZC-855550-6851795814938907

注:private static final String LL = “Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.”;

此段代码常量不可变更 否则注册码无效

可以用到2013年6月24日哟。。

原创 Json工具类

2010年6月25日 懒猫 没有评论

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.math.BigInteger;
import javax.servlet.http.HttpServletRequest;
import net.sf.json.JSONObject;

/** *//**
 * @author
 *
 */
public class JsonUtil{
 /**
  * 读取请求参数转换JSONObject对象
  *
  * @param request HttpServletRequest 对象
  * @return json格式的String对象
  * @throws Exception
  */
 @SuppressWarnings(“unchecked”)
 public static JSONObject readJson(HttpServletRequest request) throws Exception {
  JSONObject jsonObject = new JSONObject();
  try {
   Map parameterMap = request.getParameterMap();
                 // 通过循环遍历的方式获得key和value并set到JSONObject中
   Iterator paIter = parameterMap.keySet().iterator();
   while (paIter.hasNext()) {
    String key = paIter.next().toString();
    String[] values = (String[])parameterMap.get(key);
    jsonObject.accumulate(key, values[0]);
   }
  } catch (Exception e) {
   e.printStackTrace();
   throw e;
  }
  return jsonObject;
 }
 
 public static String getData(List<?> list,int index,int pageSize,Object obj){
       String json = “{total:”+list.size()+”,root:[";
       for (int i = index; i < pageSize + index && i<list.size(); i++) {
       obj = (Object)list.get(i);
           json += object2json(obj);
           if (i != pageSize + index - 1 && i != list.size()-1) {
               json += ",";
           }
       }
       json += "]}”;
       return json;
 }

 public static String getData2(List<?> list,int index,int pageSize,Object obj){
      String json = “{flag:”+”a”+”,root:[";
      for (int i = index; i < pageSize + index && i<list.size(); i++) {
      obj = (Object)list.get(i);
          json += object2json(obj);
          if (i != pageSize + index - 1 && i != list.size()-1) {
              json += ",";
          }
      }
      json += "]}”;
      return json;
 }
 
 public static String object2json(Object obj) {
     StringBuilder json = new StringBuilder();
     if (obj == null) {
       json.append(“\”\”");
     } else if (obj instanceof String ||
          obj instanceof Integer ||
          obj instanceof Float ||
          obj instanceof Boolean ||
          obj instanceof Short ||
          obj instanceof Double ||
          obj instanceof Long ||
          obj instanceof BigDecimal ||
          obj instanceof BigInteger ||
          obj instanceof Byte) {
       json.append(“\”").append(string2json(obj.toString())).append(“\”");
     } else if (obj instanceof Object[]) {
       json.append(array2json((Object[]) obj));
     } else if (obj instanceof List) {
       json.append(list2json((List<?>) obj));
     } else if (obj instanceof Map) {
       json.append(map2json((Map<?, ?>) obj));
     } else if (obj instanceof Set) {
       json.append(set2json((Set<?>) obj));
     } else {
       json.append(bean2json(obj));
     }
     return json.toString();
 }

   
 public static String bean2json(Object bean) {
     StringBuilder json = new StringBuilder();
     json.append(“{“);
     PropertyDescriptor[] props = null;
     try {
       props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
     } catch (IntrospectionException e) {}
     if (props != null) {
       for (int i = 0; i < props.length; i++) {
         try {
           String name = object2json(props[i].getName());
           String value = object2json(props[i].getReadMethod().invoke(bean));
           json.append(name);
           json.append(“:”);
           json.append(value);
           json.append(“,”);
         } catch (Exception e) {}
       }
       json.setCharAt(json.length() – 1, ‘}’);
     } else {
       json.append(“}”);
     }
     return json.toString();
 }

   
 public static String list2json(List<?> list) {
     StringBuilder json = new StringBuilder();
     json.append(“[");
     if (list != null && list.size() > 0) {
       for (Object obj : list) {
         json.append(object2json(obj));
         json.append(",");
       }
       json.setCharAt(json.length() - 1, ']‘);
     } else {
       json.append(“]”);
     }
     return json.toString();
 }

   
 public static String array2json(Object[] array) {
     StringBuilder json = new StringBuilder();
     json.append(“[");
     if (array != null && array.length > 0) {
       for (Object obj : array) {
         json.append(object2json(obj));
         json.append(",");
       }
       json.setCharAt(json.length() - 1, ']‘);
     } else {
       json.append(“]”);
     }
     return json.toString();
 }

   
 public static String map2json(Map<?, ?> map) {
     StringBuilder json = new StringBuilder();
     json.append(“{“);
     if (map != null && map.size() > 0) {
       for (Object key : map.keySet()) {
         json.append(object2json(key));
         json.append(“:”);
         json.append(object2json(map.get(key)));
         json.append(“,”);
       }
       json.setCharAt(json.length() – 1, ‘}’);
     } else {
       json.append(“}”);
     }
     return json.toString();
 }

   
 public static String set2json(Set<?> set) {
     StringBuilder json = new StringBuilder();
     json.append(“[");
     if (set != null && set.size() > 0) {
       for (Object obj : set) {
         json.append(object2json(obj));
         json.append(",");
       }
       json.setCharAt(json.length() - 1, ']‘);
     } else {
       json.append(“]”);
     }
     return json.toString();
 }

   
 public static String string2json(String s) {
     if (s == null)
       return “”;
     StringBuilder sb = new StringBuilder();
     for (int i = 0; i < s.length(); i++) {
       char ch = s.charAt(i);
       switch (ch) {
       case ‘”‘:
         sb.append(“\\\“”);
         break;
       case ‘\\’:
         sb.append(“\\\\“);
         break;
       case ‘\b’:
         sb.append(“\\b“);
         break;
       case ‘\f’:
         sb.append(“\\f“);
         break;
       case ‘\n’:
         sb.append(“\\n“);
         break;
       case ‘\r’:
         sb.append(“\\r“);
         break;
       case ‘\t’:
         sb.append(“\\t“);
         break;
       case ‘/’:
         sb.append(“\\/“);
         break;
       default:
         if (ch >= ‘\u0000′ && ch <= ‘\u001F’) {
           String ss = Integer.toHexString(ch);
           sb.append(“\\u“);
           for (int k = 0; k < 4 – ss.length(); k++) {
             sb.append(‘0′);
           }
           sb.append(ss.toUpperCase());
         } else {
           sb.append(ch);
         }
       }
     }
     return sb.toString();
 }

 这个是封装好的json工具类,可以直接放到程序里面使用,需要转成什么数据都可以了。

分类: java日记 标签:

原创 json数据格式

2010年6月25日 懒猫 没有评论

     json是一种简单的数据格式,比XML更轻巧。现在用数据进行交换都是通过JSON的格式继续传递数据。他是以键值对的形式存储数据。

    var json = {
  totalProperty : 2,
  root : [{
     "empName" : "aaa",
     "empNo" : "1111",
     "empPost" : "销售部",
     "empProvince" : "陜西"
    }, {
     "empName" : "小白",
     "empNo" : "2222",
     "empPost" : "技术部",
     "empProvince" : "山西"
    }]
 }

    这是json的格式,totalProperty 表示这个里面总共存有几条记录,root 表示具体的数据,一个“{ }” 表格一个对象,外面的中括号就表示一个数组。这里就表示存有2条记录。

    json数据格式 可以与 list 集合,JavaBean对象,数组,map 之间进行转换,转换方式也有很多种、。可以到网上找一下JsonUtil 这个公共类之间拿来用。JSON自己也提供了json.js,从http://www.json.org/json.js 下载,将其引用就可以简单的使用了。例如:JSONArray.fromObject(object)  将json转成对象。object.toJSONString()转换成JSON数据。 可以使用eval来转换JSON字符到Object

  • function myEval() {   
  •     var str = ’{ ”name”: ”Violet”, ”occupation”: ”character” }’;   
  •     var obj = eval(‘(‘ + str + ’)');   
  •     alert(obj.toJSONString());   
  • }
  •     在页面发送请求与服务器交换 发送数据与读取数据,只要将数据保存成json格式,读取的时候 用JsonReader读取,他会自动去解析加载数据。很是方便。使用json需要导入几个json的jar包。。

        json-lib-2.2.1-jdk15.jar,ognl-2.6.11.jar,commons-beanutils.jar;commons-httpclient.jar;
    commons-lang.jar;
    ezmorph.jar;不少人使用时会提示net.sf.ezmorph.xxx找不到,就是缺这个:
    morph-1.0.1.jar

    原创 MyEclipse7.5 安装 SVN插件

    2010年6月24日 懒猫 没有评论

        MyEclipse7.5 安装SVN插件 在线安装法。。。

       在工具栏中 选择 help –> softwave updates –> add/remove softwave — add –>add site.
       在name 里面写上 SVN, 在URL 写上 http://subclipse.tigris.org/update
       然后 OK ,在选择 SVN插件,到安装 一直next 完成。

       在菜单栏中选择Window→Open Perspective→Other打开Myeclipse试图列表。这个时候Myeclipse的视图列表中,就出现了“SVN Repository Exploring”一项。
       打开“SVN Repository Exploring”视图。在左边空白区域,单击右键→New→Repository Location。
       在Url一栏中输入 — 本地SVN地址(http://IP/svn/projectName), 点击Finish按钮。
    输入用户名和密码,点击OK即可看到SVN下的目录结构了。

    原创 NetBeans 6.9正式版发布(附下载地址)

    2010年6月24日 懒猫 没有评论

        NetBeans的发展很快,前段时间才有说netBeans6.8发布,还新增了很多功能,添加了嵌入式浏览器支持和JavaEE6 支持 ,此外还有 ruby maven, C++ 等增强特性。
       现在NetBeans6.9又是跨了很大一步。。现在6.9还内置shell,(本地、远程)。

        之前一直都只是用NetBeans做桌面应用程序开发,现在是看到用NetBeans开发,哪种都很炫了。。

    PS:下载地址:

    http://developer.51cto.com/art/201006/206073.htm

    分类: java日记 标签:

    转载 职场六种难以加薪的人

    2010年6月23日 懒猫 没有评论

    1、伴娘型

    这种人的毛病不在于做不好工作,而在于不能充分施展自己的潜能。在你专心时,你的工作是一流的,但你的处事立场始终像伴娘一样,不想喧宾夺主,也不想施展主动性,这阻碍了你升迁晋级。

    2、鸽子型

    勤于工作,也有技术和才华,但因为工作性质或人事结构,所学的知识完全与工作对不上号。别人升迁、加薪、晋级,你却只是增加工作量。对这种境遇,你早就不满,但你不能大胆勇敢陈述,而只是拐弯抹角地讲一讲,信息得不到传达,或根本被上司忽视了。一切全因你像一只鸽子样温和驯服,用非所长而又不去改变。

    3、幕后型

    工作任劳任怨,当真负责,可是你的工作却很少被人知道。别人老是用你的成绩去报功,你内心也想得到荣誉、地位和加薪,但没有学会如何使人留意你,留意到你的成就,从而更有成效。一些坐享其成的人在撷取你的才智后,你只会面壁垂泣。

    4、仇视型

    这种人不能说不自信,甚至说是自信过了头。在工作上很能干,表现也很不错,却看不起同事,老是以敌视的立场与人相处,与每个人都有点意见冲突。行为上太放肆,经常干涉、骚乱别人。

    5、诉苦型

    一边埋头工作,一边对工作不满足;一边完成任务,一边愁眉苦脸,让人总觉得你活得被动。上司以为你是干扰工作、爱发牢骚的人,同事以为你难相处,结果进级、加薪的机会被别人得去了,你只有“无邪”的牢骚。

    6、水牛型

    对任何要求,都笑容迎纳。别人请你帮忙,你老是放下本职工作去增援,自己手头落下的工作只好另外加班。你为别人的事牺牲不少,但很少得到欣赏,背后还说你是无用的诚实。在领导眼前不敢坦陈自己的意见,而受到委屈后,只好到家中发泄。

    累了,去读意优休息一下下,QQ空间,美文,非主流,网络日记,搞笑短信,祝福短信,热门短信,有意思啊

    分类: 北漂工作 标签:

    转载 Exjts 已改名为 sencha

    2010年6月23日 懒猫 没有评论

          今天在javaeye上,看到一篇文章说EXTJS已经改名为sencha,连域名也更改 了。。
    extjs

         June 14, 2010

         Hello,

         As a valued member of the our community, we wanted you to be the first to know that exciting things are happening at Ext JS. Today, we’re combining forces with the jQTouch and Raphaël projects and changing our name to Sencha. Our new website is www.sencha.com . For more details about the name change, please see my blog post at sencha.com/blog .

         jQTouch and Raphaël are the leading open source projects in their areas, and we’re incredibly excited to have their creators, David Kaneda and Dmitry Baranovskiy, joining the team. We believe these collaborations will lead to some spectacular new things in the weeks and months ahead.

         We’re choosing Sencha as our name because it evokes next-generation software development and it’s easy to remember, spell and pronounce. Sencha — the name of a popular Japanese green tea — is in the tradition of Java. It feels memorable to us. We hope you like it too.

         The roadmaps for Ext JS, Ext GWT, Designer, Direct etc. don’t change, and we’re excited about the new things coming in Ext JS 4.0 and the rest of the product line.

         Most existing customers will not have to take any new steps, your service contracts and licenses will carry on unchanged. In the unlikely event that you do need to do anything, you will receive an email from us separately.

         Please feel free to email me with any questions, comments or concerns you might have about this event.

    Warm regards,

    Abe Elias
    Founder & CEO
    abe

    原创 Ext 比较两个日期 startDateField增加约束条件 设置开始日期

    2010年6月23日 懒猫 没有评论

    // 日期比较,结束日期必须在开始日期之后
    Ext.apply(Ext.form.VTypes, {
    daterange : function(val, field) {
    var date = field.parseDate(val);

    if (!date) {
    return false;
    }
    if (field.startDateField
    && (!this.dateRangeMax || (date.getTime() != this.dateRangeMax.getTime()))) {
    var start = Ext.getCmp(field.startDateField);
    start.setMaxValue(date);
    start.validate();
    this.dateRangeMax = date;
    } else if (field.endDateField&& (!this.dateRangeMin || (date.getTime() != this.dateRangeMin.getTime()))) {
    var end = Ext.getCmp(field.endDateField);
    end.setMinValue(date);
    end.validate();
    this.dateRangeMin = date;
    }

    return true;
    }
    });

    ——————form表单的两个日期控件——

    {
    columnWidth : .2,
    layout : “form”,
    items : [{
    xtype : "datefield",
    fieldLabel : "合同开始日期",
    width : 100,
    name : 'contractStartdt',
    id : 'contractStartdt',
    vtype : 'daterange',
    endDateField : 'contractEnddt',
    id : "contractStartdt",
    name : "contractStartdt"
    }]
    },

    {
    columnWidth : .2,
    layout : “form”,
    items : [{
    xtype : "datefield",
    fieldLabel : "合同结束日期",
    width : 100,
    name : 'contractEnddt',
    id : 'contractEnddt',
    vtype : 'daterange',
    startDateField : 'contractStartdt',
    id : "contractEnddt",
    name : "contractEnddt"
    }]
    }

    分类: java日记 标签: