资料管理系统
开发环境:
- ssh框架:spring 3.2.4,struts 2.3,hibernate 3.6
- 数据库:兼容达梦数据库和oracle数据库
- web服务器:tomcat
以下是项目开发过程中遇到的小问题汇总
1、 tomcat打开超时
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
解决:hibernate项目下默认只有slf4j日志工具的api包,没有实现包。登录www.slf4j.org/download.html 下载slf4j日志工具,解压后将添加到lib目录下。
Initializing Spring root WebApplicationContext
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
解决:项目中使用连接了数据库的操作,而却没有开启数据库,直到tomcat连接数据库超时之后才会进行下一步,所以启动比较慢。打开数据库后再启动tomcat。成功。
2、配置log4j文件时发现找不到文件问题
一般我们直接将log4j.properties放置在src目录下,这样系统自动会找到的,其实就是放在WEB-INF/classes文件下。这个路径在classpath下,所以直接就能找到。如果现在我们想把log4j.properties文件放置在其它目录下,例如:WEB-INF下和web.xml放在一起。这时候就需要我们手动指定log4j配置文件的路径,否则系统是找不到的。
在web.xml中配置好log4j.properties路径:
param>
<param-name>log4jConfigLocationparam-name>
<param-value>/WEB-INF/log4j.propertiesparam-value>
param>
3、hibernate映射文件问题
http-bio-8080-exec-4 : PERSON is not mapped from PERSON
配置文件
<class name="org.military.po.Warship" table="warship" schema="MilitaryMS" optimistic-lock="all" dynamic-update="true">
<id name="shipversion" type="string">
name="shipversion" length="100" />
class="assigned" />
id>
……
解决:因为hql操作的是po,不是table,所以hql=“from Warship”,而不是写成“from warship”。
4、无法解析的成员访问表达式[PERSON0_.USERNAME]
达梦查询语句会默认自动改成大些字母,如果在安装数据库时选择大小写敏感,而表名或者字段名为小写,则会报错。
5、bootstrap或者html标签写的页面跳转到action时总是找不到?
解决:添加struts标签引用<%@ taglib prefix =”s” uri =”/struts-tags”%>,在form元素前添加s:标记。form表单内的元素可以不添加s:前缀,只需输入表单元素的name与action中封装的属性名称一致即可。
本质原因:s:前缀会自动将action添加相应前缀路径,另一个解决方法是更改action路径:
String path = request.getContextPath();
action="<%=path%>/loginAction"
6、jsp文件中引入js文件时,js文件中的中文会乱码
解决:eclipse中,在js文件上右击,选择属性,选择编码方式为utf-8(跟jsp编码方式一致);
7、ssh框架中,使用< a href=”“/>跳转到/WEB-INF/文件夹下的jsp页面方法
在struts.xml文件中配置
<action name= "*_*">
<result> /WEB-INF/{1}/{2}.jsp result>
action>
然后在< a href=”<%=path>/admin_userInfo.jsp” />
其中String path = request.getContextPath();
表示将跳转到/WEB-INF/admin目录下的userInfo.jsp页面
8、jsp中注销功能实现
登录action中登录成功后添加session:
ActionContext.getContext().getSession().put("username", username);
ActionContext. getContext().getSession().put( "password", userpassword );
在每个jsp显示页面头部添加语句判断:
String path=request.getContextPath();
Object username=session.getAttribute("username");
Object password=session.getAttribute("password");
if(username==null || password==null ){
request.getRequestDispatcher( "/admin_login_first.jsp").forward(request, response);
}
当点击注销时,在注销的jsp页面中添加:
<%
session.removeAttribute("username");
session.removeAttribute("password");
%>
9、如果表单中有js处理代码,而且提交后没有跳转到对应的action页面,而是跳转到了其他页面,可以检查下js文件中表单事件的submitHandler,去掉或修改即可。
10、action中配置的自定义方法只能是无参的,如果加上参数会找不到方法
如:
name= "registerCheckAction" class ="employeeAction" method="queryUserinfoBypage" >
name= "state">未审核
<result name="success" >
/WEB-INF/ admin/registerCheck.jspresult >
本想通过param传递参数给方法,但是报错。所以不能这样写
11、js通过href传参给action乱码
方法:在href传的参数 userlevel=encodeURI(encodeURI(level)) , 然后在action处理类中进行解码:userlevel =URLDecoder.decode(userlevel, “utf-8”);
12、select列表框选择问题
表格数据是动态生成的,当生成多行时,如果select组件id设为固定的,那么所有行的select组件id都一致,在用window.document.getElementById(id) 取数据时,实际上取的可能是第一行的数据。所以在生成表格select组件时,应根据表格主键设置不一样的id,比如id =’level< s:property value =”username” /> ’ ,而在取值时,可以
var obj1=window.document.getElementById('level ');
var level=obj1.value;
小技巧:因为取得select选中的文本比较麻烦,可以将value设置成和文本值一致,这样使用 var level=obj1.value 取value值即可。
13、state状态改成varchar(20),如果是char(20)属性,不满足20个长度的会补空格,那在判断跟某一字符相等时可能会出现错误。
14、使用jquery.validate.js验证表单时出现TypeError: $(…).validate is not a function错误
原因:检查jquery.min.js文件是否导入不同版本
jquery.validate.min.js文件是否导入。两者引用顺序不可改变
15、TypeError: $(…).pagination is not a function
遇到该类……不是一个函数之类的问题,往往是由于js包冲突,该问题就是由于引入的两个jquery版本冲突造成的。
注意:同一个jquery.js引入两次也会出错。