ice world

There is nothing too difficult if you put your heart into it.
posts - 104, comments - 103, trackbacks - 0, articles - 0

MyEclipse 版本号:6.0.1

在使用MyEclipse的Hibernate插件时,配置了数据源连接数据库报错,错误信息如标题。在网上搜索到了解决方案,如下:

打开你的Myeclipse目录下有一个eclipse文件夹下有一个eclipse.ini它是Myeclipse中的启动时读取的配置文件!
里边有一个启动项,Duser.language=en,
把它改成Duser.language=zh,
好了就改这一处,重启myeclipse,OK!

posted @ 2011-04-16 13:05 IceWee 阅读(342) | 评论 (0)编辑 收藏

在网上找了些资料.整理了下...借SpringSide3.0正式发布之际.贴出来.希望能给各位方便的开发体验!

在MyEclipse6.0甚至更高的6.5GA版本中的快捷键中把我们习惯性使用的Alt+/进行代码自动补齐

   但是由于于之前版本有快捷键有冲突,所以总之不能自动提示
   以下是解决方法
   方法如下:
   1.选择MyEclipse6.X菜单栏中的Window->preferences;
   2.选择General->keys;
   3.在右侧中间的窗体中点击word completion后再点击remove binding,在下方的binding中随便输入一个快捷键;
   4.然后选择Content Assist点击Remove binding,在binding中输入Alt+/;
   5.点击Ok就可以了

  
   设置技巧2
Eclipse中默认是Ctrl+/实现单词补全功能,系统会列出相近若干个选项,怎样不通过快捷

键就启动这个功能,即打入单词,停顿片刻之后就会列出若干个相近选项供选择?

下面就是解决方法
会看到只有一个“.”存在。表示:只有输入“.”之后才会有代码提示,我们要修改的地方就是这里,可是Eclipse默认只允许输入4个自定义字符。

不过我们可以把当前的设置导出,保存为一个文件,然后在文件中修改,再导入设置,这样就可以突破Eclipse的限制。

先把上图中“.”的地方输入几个随便的字符,例如“asdf”,点最下面的“OK”来保存设置。

然后打开 Eclipse的 File -> Export,在窗口中展开 General ->Perferences-->Export all然后点击NEXT。然后点击“Browse”选择任意的一个路径,保存配置文件,然后点击“Finish”。

用记事本打开刚才保存的那个配置文件(扩展文件名:*.epf),按“ctrl + F”,输入刚才设置的“asdf”,找到刚才字符串。把“asdf”修改为“abcdefghijklmnopqrstuvwxyz.”,然后保存,退出记事本。

打开Eclipse的 File -> Import 然后在打开的窗口里展开 General ->Perferences,点击NEXT,选中刚才修改过的配置文件,Finish。现在,再打开Window ->Perferences,并依次展开 Java -> Editor -> ContentAssist,会发现已经超过了4个字符,也就是说我们输入任何字母和“.”都会有代码提示了。

修改之后,默认是你输入某个字符200毫秒之后出现代码提示,如果出现输入很卡的情况,需要把提示延迟调高一些;如果你嫌它太慢,可以修改成更小的数字,不过数字改的越小,对系统性能的要求就越高,我设置的是50毫秒


以上是个人编程习惯.大家可自行设置!

posted @ 2011-04-16 13:02 IceWee 阅读(201) | 评论 (0)编辑 收藏

转载自 zhangtianshun
最终编辑 IceWee

最近也想整整spring和hibernate,于是从网上找个例子来做,例子是MySql的,但我这里数据库用的是oracle,照着例子一步步来,但配置好连接串,却怎么也连接不上,同时用pl/sql是能连接上的.报的是ORA-00604,上网google一搜,还真有这个问题,我就在这转贴下, 如图


 

原文内容是:

myeclipse6.0 连接oracle10g的问题 ORA-00604,ORA-12705

MyEclipse Database Explorer建立oracle 10g数据库连接的时候 总提示

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1

ORA-12705: invalid or unknown NLS parameter value specified

问题初步分析是 Myeclipse语言 和oracle 10g 冲突问题。

进一步分析,由于oracle 是可以正常登陆的,所以问题出现在myeclipse 这边。

解决方法一:
在网上搜索到的 估计myeclipse的版本是 5.0,解决方法

1.在windows XP控制面板中修改区域和语言选项,把"区域选项"中的"标准和格式"自定义为"英语(美国)";

2.在MyEclipse中help菜单>About MyEclipse...>点击"Configuration Details",设置其中的两个值:

osgi.nl=en_US

user.language=en

这样就可以在MyEclipse Database Explorer中顺利建立oracle连接了.

该方法在myeclipse6.0中不适应。

我的解决方法:

修改eclipse.ini文件,将"-Duser.language=en"修改为"-Duser.language=zh"。问题解决。

分析:
主要原因是MyEclipse在启动时候,语言编码是在[MyEclipse路径]\eclipse\eclipse.ini文件中加载的。 而国别编码是从系统的区域设置中得到的。如果MyEclipse默认启动参数为"-Duser.language=en",而操作系统设为"中文(中国)"MyEclipse加载后的信息就是"en_CN",这样就会出现上述问题,所以只要将两边的设置改成一致的,就可以解决上述问题. 你也可以就系统的区域设置定为"中文(中国)",修改eclipse.ini文件,将"-Duser.language=en"修改为"-Duser.language=zh",这样在MyEclipse加载后的Configuration Details信息就统一为zh_CN,即"osgi.nl=zh_CN".

如果是oracle 9i 问题,则可以如下解决方法

数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。

客户端字符集环境select * from nls_instance_parameter,其来源于v$parameter,

表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

首先查看当前数据库字符集是什么,配置资料库选用相同

把eclipse.ini里的en修改成zh后,还真行了,高手就是高手啊~

 

posted @ 2011-04-16 13:00 IceWee 阅读(955) | 评论 (0)编辑 收藏

大致意思:Tim Cull碰到一个SimpleDateFormat带来的严重的性能问题,该问题主要有SimpleDateFormat引发,创建一个 SimpleDateFormat实例的开销比较昂贵,解析字符串时间时频繁创建生命周期短暂的实例导致性能低下。即使将 SimpleDateFormat定义为静态类变量,貌似能解决这个问题,但是SimpleDateFormat是非线程安全的,同样存在问题,如果用 ‘synchronized’线程同步同样面临问题,同步导致性能下降(线程之间序列化的获取SimpleDateFormat实例)。

Tim Cull使用Threadlocal解决了此问题,对于每个线程SimpleDateFormat不存在影响他们之间协作的状态,为每个线程创建一个SimpleDateFormat变量的拷贝或者叫做副本,代码如下:

 

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/** 
 * 使用ThreadLocal以空间换时间解决SimpleDateFormat线程安全问题。 
 
*/

public class DateUtil {
    
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    @SuppressWarnings(
"rawtypes")
    
private static ThreadLocal threadLocal = new ThreadLocal() {
        
protected synchronized Object initialValue() {
            
return new SimpleDateFormat(DATE_FORMAT);
        }

    }
;

    
public static DateFormat getDateFormat() {
        
return (DateFormat) threadLocal.get();
    }


    
public static Date parse(String textDate) throws ParseException {
        
return getDateFormat().parse(textDate);
    }

}


创建一个ThreadLocal类变量,这里创建时用了一个匿名类,覆盖了initialValue方法,主要作用是创建时初始化实例。也可以采用下面方式创建;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

/** 
 * 使用ThreadLocal以空间换时间解决SimpleDateFormat线程安全问题
 
*/

public class DateUtil {    
    
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
private static ThreadLocal threadLocal = new ThreadLocal();
    
// 第一次调用get将返回null
    
// 获取线程的变量副本,如果不覆盖initialValue,第一次get返回null,
    
// 故需要初始化一个SimpleDateFormat,并set到threadLocal中
    public static DateFormat getDateFormat() {
        DateFormat df 
= (DateFormat) threadLocal.get();
        
if (df == null{
            df 
= new SimpleDateFormat(DATE_FORMAT);  
            threadLocal.set(df);
        }

        
return df;
    }

}



我们看下我们覆盖的initialValue方法:

protected T initialValue() {
    
return null;    // 直接返回null
}



当然也可以使用:
apache commons-lang包的DateFormatUtils或者FastDateFormat实现,apache保证是线程安全的,并且更高效。

posted @ 2011-04-16 02:34 IceWee 阅读(1041) | 评论 (0)编辑 收藏

HTML文档中使用了脚本控制内容的高度,所以要用到 document.body.clientHeight,但是发现结果却不是想象的那样,请教高手得来真经,是需要设置html,body样式。试试去掉红色的样式设置。脚本的功能是解决窗口进入后最大化不能自适应的问题。
 

demo.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Eletric Power Integrative System</title>
<style type="text/css">
   html, body {

    width
: 100%;
    height
: 100%;
    margin
: 0px;
    padding
: 0px;
   
}

</style>
<script type="text/javascript">
   
function $(id) {
    
return document.getElementById(id);
   }


   window.onload 
= window.onresize = function() {
    $('cententMain').style.height 
= (document.body.clientHeight - 100+ 'px'; 
    
//alert($('cententMain').style.height);
   }

</script>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
   
<tr>
    
<td>
     
<div id="header" style="height:75px; background:#006F68; left:0px; top:0px; width:100%; z-index:1000"></div> 
    
</td>
   
</tr>
   
<tr>
    
<td>       
     
<div id="cententMain" style="background-color:#fff; position:absolute; left:0px; top:75px; bottom:25px; width:100%; z-index:100">
      
<iframe id="indexFrame" name="indexFrame" src="http://www.xjgc.com" width="100%" height="100%" frameborder="1"></iframe>
     
</div> 
    
</td>
   
</tr>
   
<tr>
    
<td>
     
<div id="footer" style="background:#006F68; border-top:1px solid #1291a9; height:25px; position:absolute; left:0px; bottom:0px; width:100%; z-index:1000" align="center" valign="bottom">
      
<span style="font-size:11px;color:#fff;font-family:Verdana, Arial, Helvetica, sans-serif;">&copy;2008 - 2012 Icesoft</span>
     
</div>
    
</td>
   
</tr>
</table>
</body>
</html>


posted @ 2011-04-16 02:32 IceWee 阅读(3274) | 评论 (1)编辑 收藏

最近负责项目中的界面修改工作,遇到了一个奇怪的问题,代码如下:

.bg {
    background-attachment: fixed; /* 设定背景图不滚动 */
    font-size: 9pt; /* 设定字体 */
    background-image: url(space.gif); /* 设定背景图url */
    background-repeat: no-repeat; /* 设置背景图不平铺 */
    height: 19px; /* 等于背景图高度 */
    width: 58px; /* 等于背景图宽度 */
    background-position: center center; /* 设定背景图居中 */
    border: none; /* 取消边框 */
   }

<input type="button" class="bg" value=" 提 交">


我的系统用的是IE6,现在大多数用户用的都是IE7。我的电脑显示为:

可同事的电脑上却显示:


令我很疑惑,于是在电脑上装了IE6和IE7,发现果真是这样,由于本人并不是网页设计师,对CSS略知一二而已,这个问题是在解决不了,开始在网上搜索,但是相关主题不多,可能这不算是个问题吧!却把我难住了,终于搜索到一片相关的帖子,中说把:“   background-attachment: fixed;” 去掉,在IE7中就可以显示了,我试着去掉这行代码,果真解决问题了,但却不知其原因。。。


posted @ 2011-04-16 02:31 IceWee 阅读(628) | 评论 (0)编辑 收藏

大家都知道做分页必须要知道总记录数,这就为我们出了一到小题儿,往往我们直接用Criteria调用list方法就返回全部查询结果了,但是分页必须在返回列表之前得到总行数。我之前的做法是写两个方法,参数完全一样,一个返回 Integer,也就是记录数,一个返回List,结果集。这样写感觉挺麻烦的,还有人直接用criteria.list()返回记录数,再设置分页属性,那样还叫什么分页啊,调用list已经将数据加载到内存了,那不又成了内存分页,这种做法程序处理简单了,性能降下来了。

今天在网上闲逛发现了一个新招,代码如下(只贴出回调函数里的代码了):

灰色斜体为业务相关代码,请无视

public Object doInHibernate(Session session) throws HibernateException, SQLException {
    Criteria criteria = session.createCriteria(XtLog.class);
    Criteria userCriteria = criteria.createCriteria("xtUser");
    Criteria lcCriteria = criteria.createCriteria("xtLogClass");
    if (StringUtils.isNotBlank(userId)) {
     userCriteria.add(Restrictions.like("userId", userId, MatchMode.START));
    }
    if (StringUtils.isNotBlank(logClassId)) {
     lcCriteria.add(Restrictions.eq("logClassId", logClassId));
    }
    if (beginDate != null && endDate != null) {
     criteria.add(Restrictions.between("xtOplogtime", beginDate, endDate));
    }

    int totalRows =((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
    psm.setTotalRows(totalRows);  // 业务代码,请无视
    criteria.setProjection(null);
    criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
    Map<String, String> orderMap = psm.getOrderMap();
    if(orderMap != null){
     setOrder(criteria, userCriteria, lcCriteria, orderMap);
    }

    if(!psm.isAll()){  // 分页
     criteria.setFirstResult(psm.getRowStart());
     criteria.setMaxResults(psm.getPageSize());
    }
//    List<XtLog> logs = new ArrayList<XtLog>(); // 返回日志列表
//    List<Object[]> list = criteria.list();
//    for (Object[] o : list) {
//     logs.add((XtLog) o[2]);
//    }
//    return logs;
    return criteria.list();
}

请注意绿色加粗那两行代码,那就是hibernate获取记录总行数的写法,直接和获取列表的方法写在一起,貌似很简洁,很给力,如果你查询的就是一张表,那么没事了,但我查询的日志是要关联到用户和日志分类的,最上面那三行代码就是关联了,这时发现返回到页面后报错了,原因是返回的并不是我要的日志List,而是 Object[]的List,每个List里三个对象数组,主表的数组下标是最后一个,这时我就得使用蓝色字体的代码重新封装后返回,我感觉这样虽然解决了该问题,但还是不给力,不完美,不perfect,就是不爽,于是请将注意力转移到红色加粗字体上,写上它就OK了。

posted @ 2011-04-16 02:26 IceWee 阅读(907) | 评论 (0)编辑 收藏

想必用过Struts的朋友都遇到过这个异常吧!没遇到的也可能,只能说你很强或运气不错。

我遇到该异常的解释是我不强,用Struts不是很多,或者说根本不熟练,对一些知识了解得并不深,仅仅皮毛而已,所以这个异常困扰了我一天的时间。言归正传。

从字面上翻译就是“不能找到映射action”,当出现这个异常的时候,肯定是在请求某个action,而根据给定的路径却没找到,所以页面啪嚓抛出一个异常,满满一页。

此时你首先要检查的是请求的路径是否书写正确,与struts-config.xml中配置的路径仔细的核对,发现完全正确。真的完全吻合么?恐怕只有后面的“/XXAction”完全相同吧!所谓的完全正确是指由根目录到struts配置的path完全一致,如“http://localhost:8080/web/data/login.do”,你的struts配置文件中配置的可能是path="/data/login",那么你如此访问肯定是正确的,只怕你忘记了data这个渺小的目录的存在,遗忘请补齐。这种情况的出现往往是做项目的时候,小组都分区分模块,每个人都有自己定义的目录,在web.xml中配置struts,如:

<servlet>
    
<servlet-name>strutsAction</servlet-name>
    
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    
<init-param>
        
<param-name>config/prms/data</param-name>
        
<param-value>/WEB-INF/prms/struts-config-data.xml</param-value>
    
</init-param>
</servlet>

 

那么在你访问struts资源的时候千万不要忘记上面配置的路径

下面说说我遇到这个异常的原因吧!我直接访问服务器上的资源,即xx.jsp,如果路径写正确,这是没问题的,但是页面上却抛出了这个异常,仔细的检查发现,页面form的action写着“/login.do”,页面所在路径与“/login.do”组合后的路径并不是action配置的路径,所以根本就找不到action资源,只能抛出异常。

前辈们都建议不要直接访问服务器固定资源,如果你偏要访问那个jsp也行,使用Struts提供的ForwardAction即可,既不会出现上面的异常,又没有直接访问服务器资源,两全其美。

posted @ 2011-04-16 02:23 IceWee 阅读(1504) | 评论 (0)编辑 收藏

记得这个错误已经遇到第二次了,一打眼就知道怎么回事了,不过还是要记下,给自己长长记性。

原因是 使用了struts的标签没有闭合标签。

例:

异常(错误)写法:

<bean:write name="user" property="name">

 

正确写法:

<bean:write name="user" property="name" />


posted @ 2011-04-16 02:20 IceWee 阅读(428) | 评论 (0)编辑 收藏

今天在做应用的时候有个级联菜单的功能,因为一般做开发的时候都是使用FireFox居多(原因不用多说,相信所有的前端开发人员都曾经尝到了恶心的IE不遵守W3C标准的痛苦),因此想当然的时候对一个Select标签进行了如下操作: selectObj.innerHTML = '<option value="value">something</option>'

写完之后兴冲冲在FireFox下测试了一下功能,没问题,觉得OK!     第二天有个同事在测试的时候发现在IE下选什么都没有用,出不来子菜单,告诉我之后,着实把我郁闷了一番。在IE6下看了一把,貌似也没有报什么脚本错误,但就是innerHtML没有设置成功,因为之前没有遇到过这个问题,调了很久都没有找到原因。后来有IE Develop Toolbar看了一下生成之后的HTML结构,发现IE根本没有按照我规定的格式去渲染select标签,赶紧在Google上搜了一把,发现这是IE 的一个BUG,微软的BUG申明中注明了两种解决方案: 1. 如果您必须使用 innerHTML ,一种替代方法是使用一个 div 对象封装 SELECT 元素和然后设置 div 对象的 innerHTML 属性。 例如:

<html>
<head>
<title>My Example</title>
<script type="text/javascript">
<!--
    
var origDivHTML;
    
function init() {    
        origDivHTML 
= myDiv.innerHTML;
    }

    
    
function setValues() {    
        
var oldinnerHTML = "your original innerHTML: " + yourDiv.innerHTML;    
        alert(oldinnerHTML);    
        yourDiv.innerHTML 
= origDivHTML;    
        
var curinnerHTML = "your current innerHTML: " + yourDiv.innerHTML;    
        alert(curinnerHTML);}

//-->
</script>
</head>
<body onload="init()">
<div id="myDiv">
    
<select name="firstSelect" size="1">
        
<option>11111</option>
        
<option>22222</option>
        
<option>33333</option>
    
</select>
</div>
<div id="yourDiv">
    
<select name="secondSelect" size="1">
        
<option>aaaa</option>
        
<option>bbbb</option>
        
<option>cccc</option>
    
</select>
</div>
<button onclick="setValues();">click me to set the values</button>
</body>
</html>

 

2. 理想情况下,应使用 选项(Option) 集合添加为 SELECT 元素的选项。 下面的代码显示用编程方式将选项添加到 SELECT 元素的三种方法。例如:

<html>
<head>
<title>Example</title>
<script type="text/javascript">
<!--
    
function fill_select1() {    
        
for ( var i = 0; i < 100; i++{        
            select1.options[i] 
= new Option(i, i);    
        }

    }

    
    
function fill_select2() {    
        
var sOpts = "<select>";    
        
for ( var i = 0; i < 100; i++{        
            sOpts 
+= '<option value="' + i + '">+ i + '</option>';    
        }
    
        select2.outerHTML 
= sOpts + "</option>";
    }

    
    
function fill_select3() {    
        
for ( var i = 0; i < 100; i++{        
            
var oOption = document.createElement("OPTION");        
            oOption.text 
= "Option: " + i;        
            oOption.value 
= i;        
            document.all.select3.add(oOption)    
        }

    }

//-->
</script>
</head>
<body>
    
<h2>SELECT Box Population</h2>
    
<select id=select1 name=select1></select>
    
<input type="button" value="Populate with options list" id="button1" name="button1" onclick="fill_select1();">
    
<br /><br />
    
<select id="select2" name="select2"></select>
    
<INPUT type="button" value="Populate with outerHTML" id="button2" name="button2" onclick="fill_select2();">
    
<br /><br />
    
<select id="select3" name="select3"></select>
    
<input type="button" value="Populate with using createElement" id="button3" name="button3" onclick="fill_select3();">
</body>
</html>



虽然这个BUG在GOOGLE上已经有不少人发表了看法,我还是觉得应该自己去写下来,总结加深印象,希望能给有需要的朋友提供帮助,少走一些弯路。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/grubbyfan/archive/2009/01/09/3743344.aspx

posted @ 2011-04-16 02:01 IceWee 阅读(391) | 评论 (0)编辑 收藏

仅列出标题
共11页: First 上一页 3 4 5 6 7 8 9 10 11 下一页