ssh2整合OA问题集

来源:互联网 发布:中国移动 网络强国 编辑:程序博客网 时间:2024/06/08 13:58

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

原创粉丝点击