笔者记录下自己在开发过程中所遇到的一些常见的错误和警告,以供参考:
1、 警告:el表达式获取session中的值Settings: Could not parse struts.locale setting, substituting default VM locale
分析及解决方法:
这是默认环境没有设置好,有两种方法可以解决。在WEB-INF/classes/struts.properties或者src/struts.properties文件中如下配置:struts.locale=en_GB;或者在l中如下配置:<constant name="struts.locale" value="en_GB" />
2、 警告:No configuration found for the specified action: 'sum.action' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
分析及解决方法:
由于jsp文件中标签<s:form action=”sum.action” />它对应的源文件是<form action=”/context/sum.action”>sturtsaction属性值当成了一个action name了,但这也不影响使用;但是对于使用了动态方法调用(able.DynamicMethodInvocation = true)就没有那么幸运了,提交时就会得到HTTP Status 404 - /context/sum错误。对于以上情况,
可以把标签写成<s:form action=”sum” /><s:form action=”sum!save” /><s: namespace=”your value” action=”sum!save” />
3、 ERRORCannot create JDBC driver of class '' for connect URL 'null'
分析及解决方法:
这是由于tomcat下的l里的<Resource>没有配置好或没有相应的<Resource>配置,可按如下配置:
<Resource name=”userDatabase” auth="Container" type="javax.sql.DataSource"
          maxActive="50" maxIdle="30" maxWait="10000"
          logAbandoned="true"  username="sa" password="nenu"
          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
          url="jdbc:microsoft:sqlserver://localhost:1433;DatebaseName=st"/>
4、 ERRORCannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDriver'
分析及解决方法:
这是由于JDBC的驱动没有装,可将sqlserver需要的三个驱动包msbase.jarmssqlserver.jarmsutil.jar拷贝到tomcat的安装目录下的 common\lib文件夹下面即可。
5、 ERROR Cannot create resource instance
分析及解决方法:
这是由于<Resource .../>type属性设置不正确,按不同的数据库相应的做出调整就好了。
6、 ERRORjavax.naming.NameNotFoundException: Name jdbc is not bound in this Context
分析及解决方法:
这个很明显,上下文中不到所给的jdbc名称,仔细查看纠正一下就好了
7、 严重: Exception starting filter struts2Error filterStartContext [/struts2] startup failed due to previous errors
分析及解决方法:
1)在laction中的包路径出错
2)在工程中导入一个commons-fileupload的包
8、 java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'info' 无效
分析及解决方法:
出现这情况由两种可能性:
1)配置的数据库中没有info表或者是表名写错了,这是就要将其更改为info表所在的数据库名或表名;
2)程序当前打开的数据库并非是我们所配置的数据库,虽然机率很小,但是在以不同用户身份登录时就可能出现这种情况,因为server默认打开的是master数据库。这时可以将你要使用的数据库设置为默认或者是在sql语句中打开数据库(如:”use st select * from info”
9、 struts2中使用datetimePicker组件时的乱码显示
分析及解决方法:
参考 datetimePicker的使用.docx
10、 log4j:WARN No appenders could be found for logger(org.apachemons.digester.Digester.sax)
log4j:WARN Please initialize the log4j system properly
分析及解决方法:
由于缺少log4j.properties文件引起的,或是该文件位置放置不正确。
可以按要求格式创建一个log4j.properties文件,放到src目录下(会自动拷贝到WEB-INF\classes目录下)或直接放到WEB-INF\classes
11、 struts2表单验证过程中,当遇到验证错误或者类型转换错误时, struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面, 最后这个信息会显示在相应的错误页中.
有时我们不希望这些错误出现在页面中,而是用自己的方式来表达,可以通过以下操作实现:
1)表单标签有一个theme(主题)属性, 默认主题是使用表格; 还有Ajax等主题, 这里换为simple主题, 表示不再用表格封装这个标签;这样就可以消除自动错误提示了
2)可以使用<s:fielderror/>来显示错误,如果错误时ActionError,就需要<s:actionerror/>
标签来显示
3)在表单提交失败时,希望原来填过的值可以保留,struts2s标签自动有保留功能,html标签需要通过requestel表达式实现保留
12、 Struts2环境下,使用自己定义的时,报HTTP-500错误
分析及解决方法:
HTTP-500是指内部服务器错误,所以错误处在运行的环境配置中;如果这时报NullPointerException,那错误很可能就是因为l中忘记配置<interceptor-ref name="defaultStack" />,这样就会导致struts2默认不能使用,给程序运行造成严重影响
13、 INFOThe Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path
分析及解决方法:
这时由于tomcat没能成功加载APR,可以到tomcat.heanet.ie/native/下载tcnative-1.dll文件,这里需要注意的是tcnative-1.dll32位和64位两种,根据自己的JDK选择合适的tcnative-1.dll,放到%JDK-home%\bin目录下,再重启tomcat就能加载APR
14、 [SQLServer] IDENTITY_INSERT 设置为 OFF 时,不能向表 'person' 中的标识列插入显式值
分析及解决方法:
由于标识列是自动增长类型,在默认情况下是不能插入显式值,也就是IDENTITY_INSERT默认为OFF;
15、 使用Hibernate时,表中字段(例如:zd)的默认值失效
分析及解决方法:
由于hibernate通过session.save()来进行数据添加动作,如果程序中zd没有赋值,那么程序将会使用它的数据类型的默认值来进行添加,从而取代了数据库中配置好的默认值。可以通过以下操作来实现表中默认值生效:1) 在相关表的映射XML文件的class项增加:dynamic-insert="true";2)同时需要在相关字段设置:not-null=”false”

16、 ids for this class must be manually assigned before calling save(): hibernate.Person
分析及解决方法:
hibernate出现这个错误的原因有可能因为,你的表中有个主键。但是你插入的(调用save)时那个值是null.
如果主键是intshortlong类型,可以设置generator classnative;如果是char类型,可以在其对应的l里的id标签里添加unsaved-value="null";或者在数据表里给主键添加默认值,然后在对应的id标签里添加dynamic-insert="true"
17、 JSPout.print("<script language='javascript'>Response.Redirect('login.jsp')</script>");语句跳转不成功:
分析及解决方法:
貌似没有问题,其实Response.Redirect()asp中的跳转方法,可以使用JavaScript中的location.href='login.jsp'来替换,或者直接用java中的response.sendRedirect(‘url’)
18、 Exception: Underlying input stream returned zero bytes
分析及解决方法:
由于数据表中有个字段为text类型的,不能将一个"NULL"值和一个""(empty)存储在text类型
的字段中。否则查询时就会出现[Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes 的异常了。可以将这个字段设个默认值,如” ”,就能解决这个bug
19、 运用JS通过idName.submit()getElementById(idName).submit()控制弹出层tdiv里表单提交不成功,弹出层里的内容由隐藏层ydiv提供(tdiv.innerHTML=ydiv.innerHTML),提示对象不可用或提交后取得表单元素属性值为空
分析及解决方法:
ydivdisplay属性为none,虽然IE不会进行预读取,但其他浏览器却会这么做,这样就ididName的表单就有两个了,通过getElementById(idName).submit()提交的是隐藏层中的表单;通过idName.submit()提交就会提示说对象不可用,这里idName是个对象数组了。
解决方法有两种:一是用form自己的提交按钮;而是用document.idName[1].submit()来提交就好了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。