您的位置:首页 > 其它

ssh2整合OA问题集

2010-12-25 11:14 267 查看
遇到的问题总结
Ø @OneToMany不能用
现象:出现javax_persistence_OneToMany_orphanRemoval()Z异常
原因:开始采用hibernate版本为3.5.5,但hibernate3.5与myeclipse中的j2ee5有冲突,
解决办法:降低hibernate版本为3.3.2
Ø 堆栈溢出
原因:Model里写toString()方法时,将子集合属性写入(比如:children),否则会出懒加载问题和堆栈溢出
解决办法:不要将子集合属性写入(比如:children)
Ø a href=#会在右侧框架把整个框架都显示出来
原因是:因为设置<base href="<%=basePath%>">,所以连接已经带有及路径了,不是单单的#
解决办法: 改写成<a href="javascript:void(0)">
Ø 页面往action里提交数据 中文乱码
原因是:在web.xml里配置的spring的filter解决中文不起作用
解决办法:将web.xml里去掉spring的encodeFilter
在struts.xml里加<constant name="struts.i18n.encoding" value="GBK" />
Ø 自定义异常拦截器 页面用ognl无法取得valuestack里放入的error值
解决办法:
<%@page import="com.opensymphony.xwork2.util.ValueStack"%>
<%
ValueStack valueStack = (ValueStack)request.getAttribute("com.opensymphony.xwork2.util.ValueStack.ValueStack");
out.println(valueStack.findString("error"));
%>
Ø 分页演示例子不能用
现象:${pagerUrl}取不到值
原因:开始时容器采用的是tomcat5.5,但tomcat5.5不支持el表达式
解决办法: 使用tomcat6.0以上版本
Ø 不想看警告黄线
解决办法:加入@SuppressWarnings("unchecked")
Ø createQuery is not valid without active transaction
原因:在beans.xml加入了
<prop key="hibernate.current_session_context_class">thread</prop>
而:hibernateTemplate使用的是openSession(),不是getCurrentSession()
解决办法:把是上面那句去掉
Ø action里怎么去request传递的pager.offset
解决办法:
int offset = Integer.parseInt(ServletActionContext.getRequest().getParameter("pager.offset"));
Ø WARN OgnlValueStack60 - Error setting expression 'pager.offset'
解决办法:
出现以上以上可在log4j.properties 加入:
log4j.logger.com .opensymphony .xwork2 =ERROR 就可以解决
Ø 日期问题
jstl:<fmt:formatDate value="${person.user.expireTime }" pattern="yyyy-MM-dd"/> 能取出来
ognl:<s:date name="person.user.expireTime" format="yyyy-MM-dd"/> 取不出来
解决办法:若循环体是jstl语法写的,就用jstl的语法取日期
若循环体是ognl语法写的,就用ognl的语法取日期
Ø Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
执行InitSystemDatasTest.java导入数据时出现问题
原因是出少 jaxen包 (hibernate支持包)
解决办法:引入jaxen-1.1.3.jar
Ø 查出的模块先后不一定
解决办法:字段加排序 @OrderBy
Ø struts2 annotation validation 对action所有方法验证
解决办法:在不想验证的方法上加@SkipValidation
Ø Factory method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()]
没有:<import resource="jbpm.tx.spring.cfg.xml" />
参照:jbpm-4.4/install/src/cfg/jbpm/spring.jbpm.cfg.xml
解决办法:加入<import resource="jbpm.tx.spring.cfg.xml" />
Ø el-api.jar和juel.jar冲突
java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature
仔细观察上边异常提示,不难发现是由于解析jsp文件的类有两个,java不知道使用哪个解析jsp文件造成的。
解决方法:删除你项目中WEB-INF/lib目录下的juel.jar
Ø 数据库方言
现象一:
org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl
现象二:
Cannot delete or update a parent row: a foreign key constraint fails (`/jbpm4_execution`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY (`INSTANCE_`) REFERENCES `jbpm4_execution` (`DBID_`))
解决方法:dialect改为 org.hibernate.dialect.MySQLInnoDBDialect即可
Ø struts2上传文件取不到文件名称
第一种方案:
file 的名称只能是upload
即<input type="file" name="upload” />,这样写问题就解决了.
第二种方案:
页面:<input type="file" name="myfile “/> (自定义名称)
Action:
private File myfile;
public File getUpload() {
return myfile;
}

public void setUpload(File myfile) {
this.myfile = myfile;
}
Ø 方法执行了,但数据不保存
查找原因:事务管理里此方法是只读
解决办法:设置成可读写
Ø 数据库不能读写
现象:ERROR JDBCExceptionReporter:101 - Can't create/write to file 'C:/WINDOWS/TEMP
解决办法:
开始->运行->cmd
->cd c:/WINDOWS/temp (回车)
->del -rf FLT* (回车)
执行完成后,问题解决
Ø taskService.getOutcomes() 取不到值
查看文档:
如果一个任务拥有一个没用名称的外向转移:

taskService.getOutcomes() 返回包含一个null值集合,。
taskService.completeTask(taskId) 会使用这个外向转移。
taskService.completeTask(taskId, null) 会使用这个外向转移。
taskService.completeTask(taskId, "anyvalue") 会抛出一个异常。

如果一个任务拥有一个有名字的外向转移:

gtaskService.getOutcomes() 返回包含这个转移名称的集合。
taskService.completeTask(taskId) 会使用这个单独的外向转移。
taskService.completeTask(taskId, null) 会抛出一个异常(因为这里没有无名称的转移)。
taskService.completeTask(taskId, "anyvalue") 会抛出一个异常。
taskService.completeTask(taskId, "myName") 会根据给定的名称使用转移。

如果一个任务拥有多个外向转移,其中一个转移没有名称,其他转移都有名称:

taskService.getOutcomes() 返回包含一个null值和其他转移名称的集合。
taskService.completeTask(taskId) 会使用没有名字的转移。
taskService.completeTask(taskId, null) 会使用没有名字的转移。
taskService.completeTask(taskId, "anyvalue") 会抛出异常。
taskService.completeTask(taskId, "myName") 会使用名字为'myName'的转移。

如果一个任务拥有多个外向转移,每个转移都拥有唯一的名字:

taskService.getOutcomes() 返回包含所有转移名称的集合。
taskService.completeTask(taskId) 会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId, null) 会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId, "anyvalue") 会抛出异常。
taskService.completeTask(taskId, "myName") 会使用名字为'myName'的转移

结论:所以 只要有流向没有写名称,就返回空,
解决办法:都起一个唯一的名称
Ø java.lang.NoSuchMethodException com.opensymphony.xwork2.ActionSupport.submit()
如果url写错,找不到的话,就会去父类找,就会提示方法没有定义
解决办法:检查有没有定义此方法,还有url写每写错
Ø 关于list获取多行数据
1.首先这个list必须在action里指定;引入ModelDiven执行的model得不到值
2.list不能用泛型,否则也得不到值(本人设置泛型是得不到值)
Ø Map传值问题
现象:用freemarker生成模板文件后,在action里得不到map的值
思路:1.首先看看页面定义的组件名称是什么
假如:<input type="text" name="props(name)">
2.props从哪里来的
假如是文本
查找text.ftl
<input type="text" name="props(${field.fieldName})">
修改成:<input type="text" name="props(‘${field.fieldName}’)">
3.map是中括号
最终修改如下:
<input type="text" name="props[‘${field.fieldName}’]">
4.页面效果:
<input type="text" name="props[‘name’]”>
5.Action
private Map<String,String> props;
public Map<String,String> getProps() {
return props;
}

public void setProps(Map<String,String> props) {
this.props = props;
}
map就可以收到值了

6.文件处理
模板:file.ftl修改如上
Action处理部分:
//如果表单域是上传文件
if(propertyType.getType().equals("java.io.File")){
//注意:如果界面上传的是文件,struts可以自动转换为FormFile
//类型的对象!!!!
FileInputStream is = new FileInputStream(new File((String)source));
byte[] fileData = new byte[is.available()];
target = fileData;
}

OK,文件的处理也完成了,其他修改类似,这只是单个文件,多个文件还没测试过。另外存到数据库后,只是byte数组,没有文件名,最后,只限制上传一种文件格式,也好处理文件后缀
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: