-------------------------------------------------------------------------------------------------------------------------------------------------

经过暑期两个月对ssh2的学习和OA项目的实战训练,我对J2EE技术中著名的三大框架ssh2已渐渐有所理解和掌握。从搭建ssh2框架环境开始到写出第一个简单的ssh2登陆程序,到最后整个OA项目的实战, 期间遇到了重重困难和阻碍, 就连搭建环境就花了整整一天的功夫,而成功运行第一个ssh2程序更花了好几天,当然我相信这是大部分学习ssh2这门技术都会经历的过程,相信也是每个程序员学习任何一门新的技术都会走的路程。如今,项目已成功收尾,在这欣喜之余,我也愿意将我学习ssh2中遇到的一些常见异常问题总结如下,希望大家可以少走一些弯路,或者在遇到问题时可以及时解决。



PS:我的编程运行环境是MyEclipse8.6 + Tomcat6.1.3 + MySql


问题一:出现异常 java.lang.NoSuchMethodError: antlr.collections.AST.getLine()问题

原因:是JAR包的冲突,包 antlr2.7.2 与 antlr2.7.6 冲突(一个是tomcat下的包,一个是自己引入ssh2的包)

解决方案:删除包antlr2.7.2 即可,具体方法:

在MyEclipse下,windows-->preferences-->在文本框中搜索struts2-->选择antlr2.7.2-->remove

或者直接在tomcat该应用的目录WEB-INF\lib 删除 antlr2.7.2.jar

问题二:异常java.lang.NullPointerException

原因:空指针异常产生的主要原因如下:
(1) 当一个对象不存在时又调用其方法会产生异常
   obj.method() // obj对象不存在
(2) 当访问或修改一个对象不存在的字段时会产生异常
   obj.method()  // method方法不存在
解决方案:调试,找出异常产生的具体原因,再根据具体原因具体解决。

问题三:异常The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes
the Struts dispatcher needed for this tag. - [unknown location]

原因:struts2的过滤器映射路径写错

解决方案:在web.xml中配置struts2的过滤器如下:

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

注意:<url-pattern>这里一定要是 /*

问题四:org.hibernate.util.JDBCExceptionReporterorg.hibernate.util.JDBCExceptionReporter.logExceptions

(JDBCExceptionReporter.java:101) - Unknown type '246 in column 2 of 6 in binary-encoded result set.

原因:用mysql数据库时,某些字段值使用类型decimal、bigint等

解决方案:用mysql数据库时,避免字段值用decimal、bigint等,否则用hibernate执行hql语句时就会出现上面的异常

问题五:经过action跳转后得到的页面中css和js的样式引入不能应用

原因:经过action跳转后页面的路径改变了,不是你页面存放路径

解决方案:最好用绝对路径来引入css和js,如引入css可用

<link href="${pageContext.request.contextPath}/css/css.css" rel="stylesheet"
type="text/css" />

PS:也可使用项目名称来作为绝对路径,如项目名称为OA,则上面引入也可如下:

<link href="/OA/css/css.css" rel="stylesheet" type="text/css" />

似乎更简介,但个人不推荐使用,因为一旦你的项目名更换后,所有页面中的OA都要跟着替换,十分繁琐。

问题六:使用struts2的标签<s:textfield />时,不能在一行显示多个文本框(一个textfield占一行)

原因:初学struts2,在头脑中一直在想一个问题,就是对于struts2 ,当应用其自身的标签时,例如:

<s:form>

<s:textfield name="a"></s:textfield>

</s:form>

当查看源代码时为:

<form>

<table>

<tr><td><input type="text" name=a/></td></tr>

</table>

</form>

自动添加了table tr td 标签,所有不能一行显示多个文本框。

解决方案:在struts2中加入了theme(主题)的概念,通过设置不同的主题,可以让struts的代码输出不同的html代码,你也就相应得到不同的布局效果。

疑问1、Struts2有哪些主题?

Struts2提供了三种主题,ajax, simple, xhtml,它默认的是xhtml主题,当然你可以写任意个你自己的主题,我们称之为自定义主题

疑问2、Struts2主题怎么改?

有两种方法可以解决.

1.简单的方法(也很实用)

在Struts.xml中,加上下一行代码就可以了

<constant name="struts.ui.theme" value="simple" />

代表所有的页面采用的都是 simple主题了,这时它输出的页面,不回添加任何多余的代码,比如 table tr td 等,我们就可以像其他编辑页面的方式编辑页面的风格。

或者 在 <s:form 中添加 theme

<s:form theme="simple"></s:form>

struts2每个标签都有theme属性

2.自定义 theme,还未研究》。。。。

问题七:通过页面表单提交一些要修改数据库中数据的操作,表单提交之后,程序运行一切正常,而且,后台也打印出了sql语句,例如:insert into SYS.HNCITEM05 (SNAME, BATE, SONO, SDATE, SNO) values (?, ?, ?, ?, ?),但是,数据库中却查不到刚才插入的数据。就是说:数据并没有真正写入数据库。

原因:hibernate配置错误

解决方案:Hibernate中设置事务自动提交

即在Hibernate配置文件中进行如下设置 :

<property name="connection.autocommit">true</property>

(<!-- 设置事务自动提交(默认为false,false的话,程序对数据库的操作都不会作为事务提交) -->)

一切就OK了。

问题八:异常Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'userDao' must be of type [com.changetech.dao.impl.UserDaoImpl], but was actually of type [$Proxy16]

原因如下:

@Resource(name="userDao")

protected UserDaoImpl userDao;

public void setUserDao(UserDaoImpl userDao) {

this.userDao = userDao;

}

原来在定义Dao时,没有用接口,而直接使用的是Dao的实现类

解决方案:改为如下:

@Resource(name="userDao")

protected UserDao userDao;

public void setUserDao(IUserDao userDao) {

this.userDao = userDao;

}

问题得到了解决

问题九:更新时报错 (The given object has a null identifier)

原因:对于自增字段的主键通常不能自动将值传递到页面,即在更新时缺少主键,需要手动设置

解决方案:在页面中加上下面这句即可:

<s:hidden name="book.bookId"></s:hidden>(不会在页面显示出来,但值传递过来了)

问题十:js实现图片不能显示时使用替换图片显示

解决方案:使用img标签的onerror属性来处理默认图片,示例如下:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>替换示例</title></head><body><img id="img" src="001.jpg" onerror="showerrimg(this);" ><script language="JavaScript">function showerrimg(obj){     var errorimg = "error.jpg";//替换图片地址     obj.src = errorimg;}</script></body></html>

问题十一:MyEclipse中修改项目名称后,如何重新部署到 tomcat?

解决方案:首先修改工程名(直接按F2即可),然后选择工程名--右键--Properties--MyEclipse--Web--把Web Context-root的名字改成新的项目名称, 再把tomcat的工程删除了,最后重新部署下即可。


问题十二:在jsp页面中用request方式向struts的action中传递不了中文参数,例如下面代码:

    <silver;mso-highlight:silver;mso-font-kerning:0pt;" >      a href="findBooksByConditionAction.action?page=<s:property value="%{pageBean.currentPage+1}"/>      &property=0pt;" ><%=session.getAttribute(0pt;" >"property")mso-font-kerning:0pt;" >%>&condition=mso-font-kerning:0pt;" >      <%=session.getAttribute(mso-font-kerning:0pt;" >"condition")color:#BF5F3F;mso-font-kerning:0pt;" >%>      &category=0pt;"  ><%=session.getAttribute(0pt;"  >"category")mso-font-kerning:0pt;"  >%>&subCategory=mso-font-kerning:0pt;"  >      <%=session.getAttribute(mso-font-kerning:0pt;"  >"subCategory")color:#BF5F3F;mso-font-kerning:0pt;"  >%>0pt;"  >"          class="right-font08">下一页</background:silver;mso-highlight:silver;mso-font-kerning:0pt;"  >amso-font-kerning:0pt;"  >>  
这样传递过去的中文是乱码

解决方案:放在input文本域里面传递过去,即

    <input type="hidden" name="condition" value="<%=session.getAttribute("condition")%>"/>      <input type="hidden" name="category" value="<%=session.getAttribute("category")%>"/>      <input type="hidden" name="subCategory" value="<%=session.getAttribute("subCategory")%>"/>      <input type="hidden" name="property" value="<%=session.getAttribute("property")%>"/>  

然后直接

<a href="findBooksByConditionAction.action?page=<s:property value="%{pageBean.currentPage+1}"/>"class="right-font08">下一页</a>

但发现值竟然没有传过去(空指针报错),经问同事后知道,要想input里的值传过去必须提交表单才可,仅采用这种超链接方式进行跳转的值是传不过去的,于是将超链接换为

<a href="javascript:queryByConn('<s:property value="%{pageBean.currentPage+1}"/>');" class="right-font08">下一页</a>

js中相应加上该函数的实现:

    function queryByConn(page) {            document.bookForm.action="findBooksByConditionAction.action?page="+page;                document.bookForm.submit();            }  

在js中将表单提交即可,这样乱码问题就解决了。

问题十三:hibernate中出现异常:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)

at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)

原因:hibernate配置中 many-to-one的默认选项是 lazy = "proxy"

解决方法:<many-to-one>  及 <set> 中设置 lazy="false"即可

问题十四:如何建立svn服务器

解决方案:首先当然要安装客户端svn(小乌龟TortoiseSVN )和服务器端svn(Subversion),然后在命令行下输入以下命令:

1、  svnadmin oa(oa是存放各个版本信息的文件夹名称,自定义)

2、  svnserve  –d –r oa(打开svn服务器)

PS:可能遇到的问题:authorized failed(权限认证失败)

解决方案:在oa目录下找到passwd文件,在里面加上几个用户

用户名=密码(自己定义用户名和密码)

并将svnserve.conf里的password-db = passwd这句前面的#去掉即可(前面不能留有空格)

struts2.1.8+hibernate2.5.6+spring3.0(ssh2三大框架)常见异常原因和解决方案的更多相关文章

  1. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  2. 搭建EF6.0+MVC4搭建框架遇到的问题及解决方案

    问题一:“未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” ...

  3. 调用远程主机上的 RMI 服务时抛出 java.rmi.ConnectException: Connection refused to host: 127.0.0.1 异常原因及解决方案

    最近使用 jmx 遇到一个问题,client/server 同在一台机器上,jmx client能够成功连接 server,如果把 server 移植到另一台机器上192.168.134.128,抛出 ...

  4. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.jbpm4.4 测试环境搭建 2.Jbpm4.4+hibernat ...

  5. 开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3

    一:项目下载地址(点击 Source code(zip)) https://github.com/fzxblgong/frame_2014-12-15/releases 版本:v1.2大小:20M 二 ...

  6. Maven整合Spring3.0+Mybatis3.2+Struts2.3+查找坐标+jar包依赖(五)

    依赖传递 只添加了一个struts2-core依赖,发现项目中出现了很多jar,这种情况 叫 依赖传递

  7. MyEclipse-10.0下Struts2.1+Spring3.0+Hibernate3.3整合过程

    新建web project: 命名为SSH,做如下设置: 新建后的工程目录如下: 然后开始添加SSH框架,这里我按照struts-spring-hibernate顺序进行添加. 首先添加struts2 ...

  8. Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子

    转自:http://www.blogjava.net/wangxinsh55/archive/2011/07/24/354925.html   Jbpm4.4+hibernate3.5.4+sprin ...

  9. SSH框架(四) struts2+spring3.0的登陆示例

    (一)关键理念及需要注意的地方: 使用struts2+spring3.0的框架搭建web程序,就是使用spring来进行依赖注入(依赖注入请参考baidu上面的解释:http://baike.baid ...

随机推荐

  1. INV 调试: 如何获取库存物料事务处理调试信息

     1. 按如下方式设置系统配置文件值: 系统配置文件值 地点/用户/应用/职责层配置文件值 --汇总 FND: 启用调试日志   是 FND:调试日志层级   陈述 INV: 调试跟踪: 是 IN ...

  2. gradle测试出现IllegalArgumentException

    今天clone了一份代码,跑gradle test时出现failed,从report上来看是这个错误:IllegalArgumentException,具体如下: java.lang.IllegalA ...

  3. 高通QSD MSM APQ区别

    高通msm是Mobile Station Modem 的缩写,即移动基带工作站,是指带有基带芯片的移动处理器,实际就是基带内置的手机处理器(soc)系列. qsd是qualcomm snapdrago ...

  4. MOAC中“MO:安全性配置文件“对于开发者

    1. 获取配置文件的值:应用开发员->配置文件->输入用户配置文件名,找到上面的名称,即可填入fnd_profile.VALUE()中. 2. MO:安全性配置文件有值的话,就代表启用了M ...

  5. Oracle开发环境搭建

    一.软件准备 地址:oracle官网 安装包:因为个人学习用,所以就安装服务器端就可以了,不需要客户端. 一共两个压缩文件,解压时一起解压到到一个文件夹. 本人使用的:win32_11gR2_data ...

  6. Java数组排序基础算法,二维数组,排序时间计算,随机数产生

    import java.util.Arrays; //包含Arrays import java.util.Random; public class HelloWorld { public static ...

  7. Groovy脚本检查html坏链接

    这些天在搞Gradle翻译,因为原译者在翻译的同时也把文件进行了整理,并且把翻译过的章节放到新的文件夹中,导致可能有些超链接未改正过来变成死链接. 本想在网上找个工具来检查的,百度了几个工具要么太大要 ...

  8. Unity StrangeIoC HelloWorld

    unity有一个叫StrangeIoC的框架插件,这里写了一个使用StrangeIoC的HelloWorld,比他自带的demo更为简单,方便理解 1.插件下载,在Asset Store直接搜索Str ...

  9. 文件I/O实践(1) --基础API

    什么是I/O 输入/输出是内存和外设之间拷贝数据的过程: 设备->内存: 输入操作 内存->设备: 输出操作 高级I/O: ANSI C提供的标准I/O库函数成为高级I/O, 也称为带缓冲 ...

  10. (三十)PickerView文字和随机数的使用

    PickerView用于展示供选择的内容(例如日期选取.点菜等). 有三种情况: 1.每一列都是独立的选取 2.右边的列受到左边列的影响 3.包含图片 PickerView和TableView类似,通 ...