毕设项目期间遇到的问题记录

在项目期间遇到的问题记录一下,方便查看

1、问题:MyEclipse启动tomcat时报错"A Configuration error occurred during startup."

      解决方法:命令行中执行  netsh winsock reset 

2、hibernate懒加载问题

hibernate3中默认lazy="true",即默认是懒加载的。比如说部门关联上级部门,若是lazy="false",则它会将对应的上级部门都加载出来,而默认是不会加载的,若是要显示上级部门的信息,则会出现懒加载异常。

如图,service结束后事务提交,关闭session,而现在要显示数据,则取不到数据


解决方法:通过配置一个过滤器的方法,让其合适的关闭session(也可以将lazy设置为false)



配置:在web.xml中配置

<!-- 配置Spring的用于解决懒加载问题的过滤器 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

3、不小心删除了依赖的jar包



4、问题:我写了一个用于安装的类(就是初始化数据一些数据),之后再访问就报实体类的错误


原因:因为安装类中到一个User的构造函数,在User类中重载了,默认的构造函数就没有了,所以在映射时就报错了

解决方法:在User类中声明默认的构造函数


5、问题:如何得到全局作用域的数据(网站启动即取得一些固定数据,不需要用的时候再去查询了)

方法1:直接从全局作用域application中去拿

方法2:继承ServletContextAware接口,

定义 ServletContext 对象


实现get、set方法


取得数据



6、问题:重启tomcat 需要重新登录的问题

     原因:在tomcat的work目录下,每次关闭tomcat会生成一个session的文件,将数据写入到本地磁盘中,启动时再次读入,然后对应取得数据。


解决方法:实体类实现序列化接口。


7、问题:删除checkbox选中的记录,但是每次我用alert弹出的信息与预想的不同

原因:因为界面中还有select,所以每次也有checked


解决方法:在checked前加input即可。

8、问题:更新记录时报错

原因:操作的不是源对象

解决方法:更新操作,先取出源对象,设置属性,然后再更新

9、问题:我定义了一个用户登录表和用户详细信息表,用户登录表中存有用户详细信息的Id主键,管理用户时操作的是用户详细信息表,但是根据用户详细信息找对应的用户信息总是对应的不对,调试发现详细信息表中得到的user属性为null

原因:在详细信息的hibernate映射文件中,没有指定要关联的用户登录表中的外键字段,默认关联的是主键


解决方法:修改如下,增加property_ref属性,关联登录表外键

10、问题:UML类图自动生成代码报错


解决方法:Ctrl+F8弹出对话框,将所需要的Include进去就行了


11、问题:使用Gson将对象集合转Json错误,栈溢出


原因:我要根据部门查找对应的班级,但是班级还关联了其他的类,由于使用了hibernate它会级联加载

解决方法

		JsonConfig jc=new JsonConfig(); 
		//过滤掉不想要的属性,避免json死循环  
    	jc.setJsonPropertyFilter(new PropertyFilter() {  
    	public boolean apply(Object class_, String property, Object proValue) {
    		if (property.equals("department")||property.equals("students")) {
    			return true;  
    		}
    		else{  
    			return false;  
    		}  
    	}  
    	}); 
    	//如果有关联属性,需取消延迟加载将映射文件内的lazy设置成false  
    	JSONArray jsonArray = JSONArray.fromObject(classList,jc);

12、问题:SSH框架,删除第二层查找的数据仍要求返回第二层界面(比如第一层是所有课程列表,第二层是根据课程id查找的课程章节和文档的列表,在第二层删除操作仍然返回这一层)

解决方法

界面增加个参数(第一层查找的课程的Id传递到第二层界面,执行action时就可以将参数传递过去)

<s:a action="spiderCourse_deleteDocument?documentId=%{id}&courseId=%{courseId}" οnclick="return window.confirm('您确定要删除吗?')">
<span style="white-space:pre">	</span><img  style=" border:0px;"  src="${pageContext.request.contextPath}/style/images/del.gif"  />
</s:a>

Action中设置需要的参数(用于准备显示到第二层的数据)

setCourseId(model.getId());

struct配置中可以携带参数(界面执行action时就将courseId传递过去,执行第一层跳转到第二层的方法)

<result name="toCourseInfoList" type="redirectAction">spiderCourse_listCourseInfo?id=${courseId}</result>

13、问题:SSH框架上传文件操作提示找不到对应的Action
解决方法:form表单加入enctype属性,值为multipart/form-data

<s:form action="judgement_bulkImport" method="post" id="form_questionBank" enctype="multipart/form-data">

14、问题:struts.xml中result里带多个参数,&不能使用,会报错。

解决方法:在xml中使用&需要进行转义为&amp;

<result name="autoMakeQuestion" type="redirectAction">teacher_myCourseUI?courseId=${courseId}&amp;doInfo=${doInfo}</result>

15、问题:使用hibernate执行插入操作时,报不能插入的错误

 org.hibernate.exception.SQLGrammarException: could not insert: [com.hhit.entity。。。。

原因:我定义了一个字段是desc与mysql中的关键字冲突了.

解决方法重新命名desc字段,下面是网上找的mysql的关键字

ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE BEFORE
BETWEEN BIGINT BINARY
BLOB BOTH BY
CALL CASCADE CASE
CHANGE CHAR CHARACTER
CHECK COLLATE COLUMN
CONDITION CONNECTION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GOTO GRANT GROUP
HAVING HIGH_PRIORITY HOUR_MICROSECOND
HOUR_MINUTE HOUR_SECOND IF
IGNORE IN INDEX
INFILE INNER INOUT
INSENSITIVE INSERT INT
INT1 INT2 INT3
INT4 INT8 INTEGER
INTERVAL INTO IS
ITERATE JOIN KEY
KEYS KILL LABEL
LEADING LEAVE LEFT
LIKE LIMIT LINEAR
LINES LOAD LOCALTIME
LOCALTIMESTAMP LOCK LONG
LONGBLOB LONGTEXT LOOP
LOW_PRIORITY MATCH MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_MICROSECOND MINUTE_SECOND MOD
MODIFIES NATURAL NOT
NO_WRITE_TO_BINLOG NULL NUMERIC
ON OPTIMIZE OPTION
OPTIONALLY OR ORDER
OUT OUTER OUTFILE
PRECISION PRIMARY PROCEDURE
PURGE RAID0 RANGE
READ READS REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SPATIAL SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING STRAIGHT_JOIN
TABLE TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRIGGER
TRUE UNDO UNION
UNIQUE UNLOCK UNSIGNED
UPDATE USAGE USE
USING UTC_DATE UTC_TIME
UTC_TIMESTAMP VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WHEN WHERE WHILE
WITH WRITE X509
XOR YEAR_MONTH ZEROFILL

16、问题:Timestamp类型转为json是日期对应问题,如下图,year=116对应2016年,month=4对应5月,date=19就是19号,这样前台处理很麻烦

解决方法:定一个格式化时间的类,如下

package com.hhit.util;

import java.text.SimpleDateFormat;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class DateJsonValueProcessor implements JsonValueProcessor {
	private String format;

	public DateJsonValueProcessor(String format) {
		this.format = format;
	}

	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
		return null;
	}

	public Object processObjectValue(String key, Object value,
			JsonConfig jsonConfig) {
		if (value == null) {
			return "";
		}
		if (value instanceof java.sql.Timestamp) {
			String str = new SimpleDateFormat(format)
					.format((java.sql.Timestamp) value);
			return str;
		}
		if (value instanceof java.util.Date) {
			String str = new SimpleDateFormat(format)
					.format((java.util.Date) value);
			return str;
		}

		return value.toString();
	}
}
格式化日期,Timestamp类型的会过滤为yyyy-MM-dd HH:mm:ss类型的时间字符串
    //过滤掉对象List关联的外键
    public static JSONArray jsonListFilter(List objList, String[] filterNames){
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setIgnoreDefaultExcludes(false);    
        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);    //防止自包含 
        jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss")); 
        if(filterNames != null){
            //这里是核心,过滤掉不想使用的属性
            jsonConfig .setExcludes(filterNames) ;
        }
        JSONArray jsonArray = JSONArray.fromObject(objList, jsonConfig);
        return jsonArray;
    }
测试结果如下:

 
 


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值