ssh2整合OA问题集

来源:互联网 发布:相贯线切割机编程 编辑:程序博客网 时间:2024/06/06 21:51

 

遇到的问题总结

Ø  @OneToMany不能用

现象:出现javax_persistence_OneToMany_orphanRemoval()Z异常

原因:开始采用hibernate版本为3.5.5,hibernate3.5myeclipse中的j2ee5有冲突,

解决办法:降低hibernate版本为3.3.2

Ø  堆栈溢出

原因:Model里写toString()方法时,将子集合属性写入(比如:children),否则会出懒加载问题和堆栈溢出

解决办法:不要将子集合属性写入(比如:children)

Ø  a href=#会在右侧框架把整个框架都显示出来

原因是:因为设置<base href="<%=basePath%>">,所以连接已经带有及路径了,不是单单的#

解决办法: 改写成<a href="javascript:void(0)">

Ø  页面往action里提交数据 中文乱码

原因是:在web.xml里配置的springfilter解决中文不起作用

解决办法:将web.xml里去掉springencodeFilter

               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.jarjuel.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数组,没有文件名,最后,只限制上传一种文件格式,也好处理文件后缀

 

原创粉丝点击