毕业设计之错误集锦(六)

          貌似好几天都没有总结错误了,有两方面的原因,第一:万事开头难,后面会顺利很多,因此碰到的错误就少了;第二:后面碰到的问题一般都比较难,还没有结束。不过,估计以后会有很多错误的,先做好心理准备,这不今天就来了

        想做的好一点的系统,统计图表那是必须的,如果是用就是就是jsp做的话,那就简单了,jfreechart以来全搞定,但是........我现在是用ExtJs,想着去年出的4.0版本自带图表功能,就不需要用第三方包了,于是下了一个ExtJs4.1版本,学习了一下图表的做法,发现也很简单的,于是就自己写了一个,谁想出乎我的意料啊,4.X版本居然不兼容2.X版本,呜呼.......这不是坑我吗,难道要让我推倒重来吗,显然不可能,看来只能因循守旧,用第三方jar包了。这个不着急,先来看看其他的问题

1.ExtJs和spring、hibernate一起时的分页问题

         之前做系统的时候没有涉及到分页,第一次做分页,第一反应就是select top ........,可是,oracle居然没有top子句,要用的话只能用其他语句代替了,看了一下太麻烦了,就想着直接在前台分页得了,可是貌似没成功,好吧,这个时候突然发现用hibernate来做分页特别简单,只需要区区3句代码,如下:

Query q = session.createQuery("from table"); 
q.setFirstResult(0); 
q.setMaxResults(10); 
List l = q.list(); 
如果是有spring,dao继承自HibernateSupportDao的话,那就如下:

 /** 
 * 使用HQL语句进行分页查询操作 
 * offset 第一条记录的索引 
 * pageSize 每页需要显示的记录数 
 * @return 当前页的所有记录 
 */  
public List findByPage(final String hql, final int offset, final int pageSize){  
    List list = getHibernateTemplate().executeFind(new HibernateCallback() {  
          
        public Object doInHibernate(Session session) throws HibernateException,  
                SQLException {  
            List result = session.createQuery(hql).setFirstResult(offset)  
                            .setMaxResults(pageSize)  
                            .list();  
            return result;  
        }  
    });  
    return list;  
}  
而extjs页面只需要这样

 /** 
 * 使用HQL语句进行分页查询操作 
 * offset 第一条记录的索引 
 * pageSize 每页需要显示的记录数 
 * @return 当前页的所有记录 
 */  
public List findByPage(final String hql, final int offset, final int pageSize){  
    List list = getHibernateTemplate().executeFind(new HibernateCallback() {  
          
        public Object doInHibernate(Session session) throws HibernateException,  
                SQLException {  
            List result = session.createQuery(hql).setFirstResult(offset)  
                            .setMaxResults(pageSize)  
                            .list();  
            return result;  
        }  
    });  
    return list;  
}  
碉堡了,有木有,太强大了,震撼中................

2.struts跳转访问jsp页面与直接访问jsp页面的区别

        之前做项目是为了加快速度,因此就跳过了登录模块,直接去请求index.jsp页面,功能都做的差不多的时候把登录模块和index页面整合到一起的时候出现错误了,之前心想着不就是struts跳转一下吗,结果做起来之后才发现,struts跳转过去之后index页面加载的东西都找不到,可是明明直接访问index页面的时候好好的,仔细想了一下之后才发现,原来两者是有区别的,从struts跳转是从外到里加载文件,而直接访问index的话,是从里到外加载文件,出发点不同导致了路径不同

3.DWR框架出现erro弹出框问题

        这两天毕业设计只剩下两个技术难点了,一个是权限管理,一个是统计图表。对于权限管理,难点在于在js文件里取到权限值,一般用ajax就可以返回data,但是为了使自己的毕设有技术含量,遂决定采用全新的dwr框架,这样也有挑战性一点,可谁曾想一个error弹出框居然花了我两天的时间,呜呼,这挑战性代价也太大了吧,不过还好总算是出来了,先庆祝一下哈!如下就是那个error弹出框所对应的的http响应(这里我想说的还是那句话,要主动去找错,就像这次,除了弹出一个error对话框之外,myeclipse没有保存,firefox没有报错,即使是用firebug,控制台什么的都没错,最后居然是在网络下的XHR里面的请求连接下响应里面才找到的,不容易啊,就这一个线索,居然会藏这么深,这是考验我的编程经验哈)废话不说了,如下图所示

        经历了这个错误,发现自己对于百度和google的依赖性太强了,以至于有多个错误出现的时候没能分析出错误的根本原因,而是一股脑的就去百度或者google了,而且不巧的是,dwr这个框架的信息在网络上很有限,用汉语表述的就更少了,以至于只能一直头皮看英语的了。

        网上对于这个问题都集中在dwr和spring的结合上,当时我就在想,我不结合可以吗,我不就是想用一下吗,有必要这么麻烦吗?但是网上都这么说,再加上自己也没什么好方法,也就只能试一下了,废了好半天把dwr和spring结合在一起了,一运行,还是一样的error,继续搜索,结果有人说如果在spring总遇到了aop(面向切面编程),结合的时候又多出一些东西,好吧,那就这能再加东西吧,好不容易整合好了,一运行,还是那个熟悉的error,此时真有点绝望了,一天就这样过去了,洗洗睡吧。

       今天早上起来,重新审视这个问题的时候,发现自己有点“当局者迷了”,何不跳出当前的困境,静下心来想想,而不是被网络所左右想到这里,果断关掉搜索框,静静的看着这个错误,开始分析,既然弹出error,那么在什么地方产生这个error的呢,上图中很明显,javaClassName:java.lang.Throwable,message:error,而对比那些成功的项目,这个地方出现的应该是你要获得的值,也就是说你的这个值出现问题了,而在程序当中值出现问题,无非两种情况,null和类型转换出错,既然这样,那我们就一一试验,首先测试了一下目标值,非空,再看类型,由于在oracle数据库中这个字段是序列的,为number类型,映射到java中就是bigdecimal,而这个值在java中不太常见,会不会是这儿出错了?那就直接转换成string类型得了,结果还是error,那就换成最常见的int吧,结果.....结果就没有error了,成功了!这一刻不容易啊,写下来,纪念一下。等等,突然发现自己return的时候已经限定成了integer类型,天啊,瞬间感觉自己有多傻了,唉,时间已经浪费了,只能以此为教训了。

         废话不说了,下面就把配置dwr的过程写一下,做个备份吧

第一步:dwr.jar(如果要与spring结合的话,还需要spring-web-servlet.jar)

第二步:配置web.xml

<!--dwr框架设置 -->
	<servlet>
		<servlet-name>dwr-invoker</servlet-name>
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
		<init-param>
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>dwr-invoker</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
第三步:配置dwr.xml(一般与web.xml同一目录级别)

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
	<allow>
		<create javascript="Permission" creator="new">//这里的javascript是之后自动生成的js文件名,保持一致就可以了,
                                                              //creator如果是和spring结合的话就选spring,name就是beanName了
			<param name="class" value="com.shiep.dwr.Permission"></param>//如果不和spring结合那就name是class了,
                                                                                     //value的话就是你要调用的java方法所在的类了
		</create></allow>
</dwr> 
第四步:编写上文提到的java方法

package com.shiep.dwr;

import javax.servlet.http.HttpSession;

import org.springframework.context.ApplicationContext;

public class Permission {

	public int getIdRole(HttpSession session){
		return (Integer) session.getAttribute("idRole");
	}
}
第五步:html或者jsp页面引入dwr的js文件

		<script type='text/javascript' src='../dwr/interface/Permission.js'></script>//这里就是自动生成的js文件,名字与dwr.xml中的保持一致就可以了
		<script type='text/javascript' src='../dwr/engine.js'></script>
第六步:在js页面调用java方法

var idRole;
DWREngine.setAsync(false);
Permission.getIdRole(load);
DWREngine.setAsync(true);
function load(data) {
	idRole = data;	
}
alert(idRole);
OK!至此一切搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值