公告

近期工作:前端优化;攻击防御

博客统计信息

51cto推荐博客
用户名:tianya23
文章数:849
评论数:39
访问量:325888
无忧币:3113
博客积分:5860
博客等级:8
注册日期:2009-12-09

 
   ECLIPSE里面SVN状态图标消失,重新启动eclipse,重新导入工程也不能显示SVN状态图标.这多半是由于之前eclipse没有正常关闭引起的.

解决办法2个:
1. 在Window>Preference->Team..

console.log(object[, object, ...])

在控制台输出一条消息。如果有多个参数,输出时会用空格隔开这些参数。
第一个参数可以是一个包含格式化占位符输出的字符串,例如:

console.log("The %s jumped over %d tall buildings", animal, count);

上面的例子可以用下面的无格式化占位符输出的代码替换:

console.log("The", animal, "jumped over", count, "tall buildings");

并且,这两种方式是可以组合使用的。如果使用了格式化占位符,而提供的参数的个数多于占位符的个数,那么,多余的参数会以空格分隔的方式附加在字符串后面,就像:

console.log("I am %s and I have:", myName, thing1, thing2, thing3);

如果参数是一个Javascript对象,那么在控制台输出的就不是静态文字,而是一个可交互的超链接,点击超链接可以查看该对象的HTML, CSS, Script, DOM窗口,可用格式化字符串%o代替Javascript对象。

2012-04-29 14:57:15
 
1、联动菜单
var provinces = [ [ 1, '北京' ], [ 2, '上海' ] ]; var cities = new Array(); cities[1]&..
2012-04-24 20:08:40
Webx中提供了大量的serivce来处理,主要services如下:
Form Service —— 提供基于HTML form的表单验证功能。 Template Service —— 提供基于文..
配置如下:
<select id="getBlackListListTypes" resultClass="java.lang.Integer" parameterClass="java.lang.Integer">     &n..
2012-04-23 10:00:58
 
 
1.list转set 

Java代码  收藏代码


Set set = new HashSet(new ArrayList());  

 
 
2.set转list
 


Java代码  收藏代码


List list = new ArrayList(new HashSet());  


 
3.数组转为list
 


Java代码  收藏代码


List stooges = Arrays.asList("Larry", "Moe", "Curly");  


 此时stooges中有有三个元素。注意:此时的list不能进行add操作,否则会报“java.lang.UnsupportedOperationException”,Arrays.asList()返回的是List,而且是一个定长的List,所以不能转换为ArrayList,只能转换为AbstractList 

原因在于asList()方法返回的是某个数组的列表形式,返回的列表只是数组的另一个视图,而数组本身并没有消失,对列表的任何操作最终都反映在数组上. 所以不支持remove,add方法的 
 


Java代码  
extjs用ajax传送数据的方法有post(用普通的表单或用json格式),get(用params). 

在回传的时候用json(推荐方法) ,需要注意的是服务器必须要返回json格式,并且必须要设置success的值,当然你不这样也能,但是这..
类别:ExtJS|阅读(21)|回复(0)|(0)阅读全文>>
2012-04-19 20:20:39

1.profile可以干什么
一个Profile可以覆盖项目构件的最终名称,项目依赖,插件配置以影响构建行为。Profile还可以覆盖分发配置;例如,如果你通过一个staging profile发布一个构件到staging服务器上,你就可以..
其实就是xml的特殊符号,因为它的配置就是xml,所以可以用下面这种写法转义
    &lt;          < 

    &gt;&nb..
http://www.blogjava.net/BearRui/archive/2010/05/04/js_css_merge_compress_cache.html
 本篇文章主要讨论下目前JS,CSS 合并、压缩、缓存管理存在的一些问题,然后分享下自己项目中用到的1个处理方案,并..
2012-04-18 08:35:10

http://blog.csdn.net/lenotang/article/details/3102727


 1.      首先还是主要的显示页面tree.html,这里有两个地方要注意一下,一个是我们引用的JS如果采用GBK的默认编码,浏览器会显示未结束的字符串常量的错误,所以我们一般会修改JS文件的编码方式为UTF-8,或者在导入JS时加上编码字符集。第二个是我们要定义一个显示TreePanel的DIV。
2.      然后是我们的主体JS文件,tree.js,为了凸显主题,这个我已经做了必要的简化,还做了详细的注释,大家好好看一下。 



Ext.onReady(function() {     Ext.QuickTips.init();// 浮动信息提示     Ext.BLANK_IMAGE_URL = 'resources/images/default/s.gif';// 替换图片文件地址为本地       // 创建一个简写     var Tree = Ext.tree;     // 定义根节点的Loader     var treeloader = new Tree.TreeLoader({             // dataUrl : 'tree.jsp'//这里可以不需要指定URL,在加载前事件响应里面设置             });       // 添加一个树形面板     var treepanel = new Tree.TreePanel({         // renderTo:"tree_div",//如果使用renderTo,则不能使用setRootNode()方法,需要在TreePanel中设置root属性。         el : 'tree-panel',// 将树形添加到一个指定的div中,非常重要!         region : 'west',         title : '功能菜单',         width : 200,         minSize : 180,         maxSize : 250,         split : true,         autoHeight : false,         frame : true,// 美化界面         // width : 200,//面板宽度         // title : '可编辑和拖动的异步树',//标题         // autoScroll : true, // 自动滚动         enableDD : true,// 是否支持拖拽效果         containerScroll : true,// 是否支持滚动条         rootVisible : true, // 是否隐藏根节点,很多情况下,我们选择隐藏根节点增加美观性         border : true, // 边框         animate : true, // 动画效果         loader : treeloader             // 树加载         });     // 异步加载根节点     var rootnode = new Tree.AsyncTreeNode({                 id : '0',                 text : '家电品牌总类',                 draggable : false,// 根节点不容许拖动                 expanded : true             });       // 为tree设置根节点     treepanel.setRootNode(rootnode);       // 响应加载前事件,传递node参数     treepanel.on('beforeload', function(node) {                 treepanel.loader.dataUrl = 'tree.jsp?parentId=' + node.id; // 定义子节点的Loader             });     // 渲染树形     treepanel.render();     // 展开节点,第一个参数表示是否级联展开子节点     rootnode.expand(true);       // 设置树的点击事件     function treeClick(node, e) {         if (node.isLeaf()) {             e.stopEvent();             var n = contentPanel.getComponent(node.id);             if (!n) {                 var n = contentPanel.add({                             'id' : node.id,                             'title' : node.text,                             closable : true,                             autoLoad : {                                 url : 'tabFrame.jsp?url=grid.html',                                 scripts : true                             } // 通过autoLoad属性载入目标页,如果要用到脚本,必须加上scripts属性                         });             }             contentPanel.setActiveTab(n);         }     }     // 增加鼠标单击事件     treepanel.on('click', treeClick);       // 定义右键菜单     var rightClick = new Ext.menu.Menu({                 id : 'rightClickCont',                 items : [{                             id : 'rMenu1',                             text : '添加节点',                             // 增加菜单点击事件                             handler : function() {                                 alert('添加节点的实现!');                             }                         }, {                             id : 'rMenu2',                             text : '编辑节点'                         }, {                             id : 'rMenu3',                             text : '删除节点'                         }]             });     // 增加右键点击事件     treepanel.on('contextmenu', function(node, event) {// 声明菜单类型                 event.preventDefault();// 阻止浏览器默认右键菜单显示                 rightClick.showAt(event.getXY());// 取得鼠标点击坐标,展示菜单             });       /*      * 设置tree的节点放置函数此函数有一个很重要的参数对象e e对象有三个重要的属性,分别为dropNode,target,point      * 1.dropNode为在拖动时鼠标抓住的节点 2.target为将要放置在某处的节点      * 3.point为被放置的状态,分别有append表示添加,above节点的上方,below节点的下方。      *      */     treepanel.on('nodedrop', function(e) {                   if (e.point == 'append') {                     alert('当前"' + e.dropNode.text + '"划到"' + e.target.text                             + '"里面!');                 } else if (e.point == 'above') {                     alert('当前"' + e.dropNode.text + '"放在了"' + e.target.text                             + '"上面!');                 } else if (e.point == 'below') {                     alert('当前"' + e.dropNode.text + '"放在了"' + e.target.text                             + '"下面!');                 }             });       // 在原有的树形添加一个TreeEditor     var treeEditer = new Tree.TreeEditor(treepanel, {                 allowBlank : false             });     /*      * 为创建的treeEditer添加事件 有两个事件最为常用,一个为beforestartedit另一个为complete      * 从名字就可以看出,beforestartedit事件是在编辑前的事件,因此可以通过它来判断那些节点可以编辑那些不可以。      * complete为编辑之后的事件,在这里面可以添加很多事件,比如添加一个Ext.Ajax向后台传送修改的值等等。      */     treeEditer.on("beforestartedit", function(treeEditer) {                 var tempNode = treeEditer.editNode;// 将要编辑的节点                 if (tempNode.isLeaf()) {// 这里设定叶子节点才容许编辑                     return true;                 } else {                     return false;                 }             });       treeEditer.on("complete", function(treeEditer) {                 alert("被修改为" + treeEditer.editNode.text);             });       // (1)通过TabPanel控件的html属性配合<iframe>实现。该方法是利用     // html属性中包含<iframe>的语法来调用另一个页面,具体见代码。     // (2)通过TabPanel控件的autoLoad属性实现。该方法是利用autoLoad属性,它有很多参数,     // 其中有两个比较重要,url表示要载入的文件,scripts表示载入的文件是否含有脚本,该属性相当重要,     // 如果在新的页面中要创建Ext控件,必须指定该参数。该方法实现较前一个复杂,因为引入的文件不是一个完整的html文件,     // 有可能只是内容的一部分,但是资源占用较少,而且载入速度较快(它有一个载入指示)       // 添加第一个节点(html)     treepanel.root.appendChild(new Ext.tree.TreeNode({         id : 'htmlPanel',         text : '通过html打开',         listeners : {             'click' : function(node, event) {                 event.stopEvent();                 var n = contentPanel.getComponent(node.id);                 if (!n) { // 判断是否已经打开该面板                     n = contentPanel.add({                         'id' : node.id,                         'title' : node.text,                         closable : true, // 通过html载入目标页                         html : '<iframe scrolling="auto" frameborder="0" width="100%" height="100%" src="grid.html"></iframe>'                     });                 }                 contentPanel.setActiveTab(n);             }         }     }));       // 添加第二个节点(autoLoad)     treepanel.root.appendChild(new Ext.tree.TreeNode({                 id : 'autoLoadPanel',                 text : '通过autoLoad打开',                 listeners : {                     'click' : function(node, event) {                         event.stopEvent();                         var n = contentPanel.getComponent(node.id);                         if (!n) { // //判断是否已经打开该面板                             n = contentPanel.add({                                         'id' : node.id,                                         'title' : node.text,                                         closable : true,                                         autoLoad : {                                             url : 'tabFrame.jsp?url=grid.html',                                             scripts : true                                         } // 通过autoLoad属性载入目标页,如果要用到脚本,必须加上scripts属性                                     });                         }                         contentPanel.setActiveTab(n);                     }                 }             }));       // 右边具体功能面板区     var contentPanel = new Ext.TabPanel({         region : 'center',         enableTabScroll : true,         activeTab : 0,         items : [{             id : 'homePage',             title : '首页',             autoScroll : true,             html : '<div style="position:absolute;color:#ff0000;top:40%;left:40%;">Tree控件和TabPanel控件结合功能演示</div>'         }]     });       new Ext.Viewport({                 layout : 'border', // 使用border布局                 defaults : {                     activeItem : 0                 },                 items : [treepanel, contentPanel]             });   }); 
 
3.   再接着是tree.js中ExtJS的TreeLoader调用的tree.jsp,在目录树上点击TreeNode后会加载下一级节点。tree.jsp负责TreeNode点击后,传回由下一级节点构造的JSON数据,也就是前台树异步请求访问的后台WEB组件。它会调用JAVABEAN操作数据库,得到每个节点的子节点数据。这里由于我们后台需要返回给客户端JSON格式的数据,也就是需要操作JSON数据格式。所以我们首先要下载JSON-lib,地址:http://json-lib.sourceforge.net/打开网址后,首页上有一段话: 

 Json-lib requires (at least) the following dependencies in your classpath: 

      jakarta commons-lang 2.3 

      jakarta commons-beanutils 1.7.0 

      jakarta commons-collections 3.2 

      jakarta commons-logging 1.1.1 

      ezmorph 1.0.4 

   需要下载上述jar文件,配合JSON-lib 一起使用。 

   commons 下载地址:http://commons.apache.org/ 

   ezmorph 下载地址:http://ezmorph.sourceforge.net 

   或者,到 http://www.docjar.com 搜索下载。 

   JSON的用法,我们已经提过多次,大家可参考相关文档。看看tree.jsp的代码:
 
<%@ page language="java" pageEncoding="utf-8"%>
<jsp:useBean class="org.leno.javabean.JSONTree" id="JSONTree"></jsp:useBean>
<%
    String parentId = "";
    if (request.getParameter("parentId") != null) {
        parentId = request.getParameter("parentId").toString();
    }
    JSONTree.setparentId(parentId);
%>
<%=JSONTree.getJSONString()%>
 
4.       后台用到的JAVA类,这里包括访问数据库的数据源工厂类DataSourceFactory(这里用到了DBCP连接池,大家要记得导入连接sqlserver 2000数据库和dbcp连接池的相关JAR包!),定义树节点的属性,包括节点ID、Text、图标、是否为叶子节点、是否展开等的类JSONTreeNode,还有类似DAO能够封装数据访问和格式转换细节的JSONTree。
 
  package org.leno.javabean;   import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource;   public class DataSourceFactory {       /**      * @param args      */     private static BasicDataSource ds;       public static BasicDataSource getDataSource() {         if (ds == null) {             ds = new BasicDataSource();             ds.setDriverClassName("com.microsoft.jdbc.sqlserver.SQLServerDriver");             ds.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=java28");             ds.setUsername("sa");             ds.setPassword("123");             ds.setMaxActive(5);         }         return ds;       }       public static void main(String[] args) {         // TODO Auto-generated method stub         try {             System.out.println(DataSourceFactory.getDataSource()                     .getConnection());         } catch (SQLException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }       }   } package org.leno.javabean;   /**  * @author leno  *定义树节点的属性,包括节点ID、Text、图标、是否为叶子节点、是否展开等。  */ public class JSONTreeNode {           private String id;            //ID          private String text;          //节点显示          private String cls;           //图标          private boolean leaf;         //是否叶子          private String href;          //链接          private String hrefTarget;    //链接指向          private boolean expandable;   //是否展开          private String description;   //描述信息                  get/set…… } package org.leno.javabean;   import java.sql.*; import java.util.*; import net.sf.json.JSONArray;   public class JSONTree { private String parentId;         public String getJSONString(){              Connection con =null;         Statement st = null;         ResultSet rs = null;         List<JSONTreeNode> treeNodeArray = null;                 String SQLString = "SELECT * FROM Categories WHERE parentId="+this.parentId+" ORDER BY categoryId";                        try         {             con = DataSourceFactory.getDataSource().getConnection();             st = con.createStatement();             //查找所有拥有下级类别的类别ID             rs = st.executeQuery("SELECT parentId FROM Categories WHERE parentId>0 Group By parentId Order By parentId");                                    StringBuffer parentIDBuffer =new StringBuffer();             parentIDBuffer.append("|");                     while(rs.next())             {                 parentIDBuffer.append(rs.getString("parentId"));                 parentIDBuffer.append("|");             }             //得到所有的parentcategoryId列表             String parentIDString = parentIDBuffer.toString();                                 rs = st.executeQuery(SQLString);                treeNodeArray = new ArrayList<JSONTreeNode>();             while(rs.next())             {                 JSONTreeNode treeNode = new JSONTreeNode();                 String categoryId = rs.getString("categoryId");                 treeNode.setId(categoryId);                 treeNode.setText(rs.getString("categoryName"));                 treeNode.setDescription(rs.getString("description"));          //                    treeNode.setHref("rightframe.jsp?categoryId=" //                      + rs.getString("categoryId").toString()); //                    treeNode.setHrefTarget("rightFrame");                                               if (parentIDString.indexOf("|"+categoryId+"|")>=0) //父节点                     {                         treeNode.setCls("folder");                         treeNode.setLeaf(false);                         treeNode.setExpandable(false);                     }                     else //子节点                    {                         treeNode.setCls("file");                         treeNode.setLeaf(true);                         treeNode.setExpandable(false);                     }                     treeNodeArray.add(treeNode);             }                         JSONArray JsonArray = JSONArray.fromObject(treeNodeArray); //得到JSON数组                   return JsonArray.toString();//返回JSON数据         }         catch(Exception e)         {             System.out.println("getJSONString() of JSONTree.java throws : "+e.toString());             return "";         }         finally         {            try {            if(con!=null&&!con.isClosed()){                 con.close();            }         } catch (SQLException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         }     }           public String getparentId() {         return parentId;     }       public void setparentId(String parentId) {         this.parentId = parentId;     }   } 
 
5.      最后是我们的数据库脚本script.sql,大家用SQLServer 2000数据库创建一个java28的database,然后执行下列脚本即可。
 
[/img]..
类别:ExtJS|阅读(41)|回复(0)|(0)阅读全文>>
2012-04-16 17:03:00
1、wex3分析
  webx3采用了和spring相同的设计思路,在创建bean的时候,存在factory bean的概念,不过换了名字为ToolFactory
其中涉及2个方法,分别是boolean isSingleton();和Object createTool() throws..
类别:Webx|阅读(3)|回复(0)|(0)阅读全文>>
Map在遍历时候通常 现获得其键值的集合Set,然后用迭代器Iterator来对Map进行遍历。
如Java中的容器Map: 
for(Person person : pList){ 
if(person.getGender()==Gender.MALE){ 
pList.remov..
2012-04-16 01:29:42
 

 EasyJWeb 2.0快速上手
脚手架:svn checkout http://www.opensourceforce.org/repos/easyjweb easyjweb-read-only
下载地址: http://www.erpwin.com:30310/download.ejf?f=easyjweb-2.0.z..
2012-04-15 16:46:41
1. 

安裝JS Duck3 

tar.gz版本 

https://nodeload.github.com/senchalabs/jsduck/tarball/master 

exe版本 

http://cloud.github.com/downloads/senchalabs/jsduck/jsduck-3..
类别:ExtJS|阅读(33)|回复(0)|(0)阅读全文>>
2012-04-14 11:03:38
 
Ext.onReady(function() {     Ext.data.validations.lengthMessage = "错误的长度";     Ext.apply(Ext.data.validations..

Chrome调试时,直接打开本地html文件一切正常,但是访问网址时,总是在console里面报错“Uncaught ReferenceError: xl_chrome_menu is not defined”
如图




 google一下才知道是是迅雷的Chrome插件惹的祸
Chrome下点右上角的扳手图标-》工具-》扩展程序-》迅雷-》卸载
重新测试,搞定,收工!
[/img]..
类别:ExtJS|阅读(132)|回复(0)|(0)阅读全文>>
2012-04-13 11:38:11
1、常用api汇总
API详解(一)-Ext
apply( Object obj, Object config, Object defaults ) : Object

从config拷贝所有的属性到obj,如果有defaults参数,也将拷贝其属性到obj



applyIf( Object obj, Object c..
2012-04-12 15:34:47
 
在文件上传中,需要对excel中的空白行进行处理,但jxl中没有提供。自己增加的方法如下:
private int getRightRows(Sheet sheet) { int rsCols = sheet.getCol..
昨天晚上提交的代码,今天运行起来,始终报错:
 Open quote is expected for attribute "{1}" associated with an  element type 'id',查了半天,觉得很奇怪。
回滚到昨天的代码,运行正..
类别:JavaEE|阅读(112)|回复(0)|(0)阅读全文>>
2012-04-07 11:12:56
http://tianya23.blog.51cto.com/1081650/813863
http://tianya23.blog.51cto.com/1081650/821649
1、Ajax标准请求:
Ext.Ajax.request({           ..
类别:ExtJS|阅读(26)|回复(0)|(0)阅读全文>>
2012-04-05 11:03:57
 

1、步骤1:在filter中增加权限判断
public class AuthFilter implements Filter {      @Override     public&nbs..

ExtJS里handler和listener都是用来对用户的某些输入进行处理的,有必要区分一下各自都是怎么用的。 
Handler
handler与Action相关联,一个Action可以有多个Component引用;
Action是一个可被共享的对..
类别:ExtJS|阅读(48)|回复(0)|(0)阅读全文>>
2012-03-30 15:56:06
http://tianya23.blog.51cto.com/1081650/813863
1、卡片式布局
Ext.onReady(function() {     var panel = new Ext.Panel({     ..
类别:ExtJS|阅读(97)|回复(0)|(0)阅读全文>>
2012-03-30 11:20:52
 
 
Ext.onReady(function() {     Ext.QuickTips.init();      // turn on validation errors beside ..
类别:ExtJS|阅读(12)|回复(0)|(0)阅读全文>>
 <<   1   2   3   4   5   >>   页数 ( 1/34 )