erp项目错误总结

1.引入项目的静态页面文件,路径报错。

1.点击Project-Clean..选择报错的项目,然后清除缓存。或者在Preferences-General-Network Connections-cache清除缓存。(同样道理)

2.将Preferences-Validation中的一些自动检测报错的文件的✔去掉。

2.引入的项目其他原因报错

1.是否jdk与当前项目默认jdk相匹配,如果不匹配清更换。更换之后仍然报错,到项目的根目录中的settings文件夹内xml文件夹中的jdk版本号,令其与当前的相匹配

3.ssh运行之后,注入的数据总是报空指针

1.      测试文件中没有用引入 注解 @Runwith(value=SpringJUnit4ClassRunner.class)和注解@ContextConfiguraction(location={“classpath:ApplicationContext.xml”})

2.      没有创建service对象,或者创建了之后没有用注解@Autowired注入值

4配置的jdbc.properties文件,applicationContext文件中无法读取到值

1.     没有在applicationContext.xml文件中配置这句话(用来读取指定的properties文件)

<context:property-placeholderlocation="classpath:jdbc.properties"/>  

5.hibernate.cfg.xml文件配置

1.逆向工程生成表文件之后,不要忘记将hbm.xml文件的路径配置到其中

6.${path}不管用,点不进去

可能是由于关了某些东西,点不过去了,但是在访问网页还是可以访问到的。如果不能访问到,请检查配置问题,比如说多加了”/”,或者少加了”/”;或者要点过去的那个文件不存在了,位置不对。

7.ClassNotFound异常信息

这是找不到某个包或引入文件了。

8.eclipse或者myeclipse解决卡,运行慢的问题

在他们的安装目录中的ini文件里配置如下

-XX:MaxPermSize=768m

-Xms1024m

-Xmx2000m

值都可以改变,但是要注意的是:如果配置的过大会导致一打开软件就闪退的问题,主要是由于Xmx引起的,将其变小一点就可以了

9.关于many-to-one与one-to-many的使用时间与方法问题

如果你需要在取得孩子(Son)的时候,同时需要知道该孩子的父亲(Father)是谁,你就可以在孩子的映射定义文件Son.hbm.xml里定义孩子跟父亲的关系映射:many-to-one。
同样,如果需要知道某父亲的所有孩子,就可以在父亲的映射定义文件Father.hbm.xml里定义父亲跟孩子的关系映射:one-to-many。

<many-to-one column="FATHER_ID(表中定义的)

" name="fatherson  model中定义的 father model的变量值)"

 class="com.yourcompany.entity.Fatherfather model的路径)" />

 <one-to-manyclass="com.yourcompany.entity.Son" />

!!!!!!!!! 逆向工程生成的表,与hbm.xml文件,不会生成这种映射关系,用的时候需要自己手动写入

10.日期转换

继承StrutsTypeConverter

11.用< s:iterator>标签,遍历数组获取不到值

Debug之后,是由于最源头的,查询方法return没有返回值返回的null,也就是说有错误。还有就是,用反射获取属性值的时候,对于私有属性的获取没有暴力破解,这两个地方处理好之后,程序正确,访问到值。(一定要仔细看报的错误,然后逐条看完之后,找每个自己编写的文件,看哪里有异常,然后一点一点向上追溯)

 

12.在做用户名校验,配置了,ajax却不运行,不访问action中。

如果确认自己代码没有问题,Project→Clean,清空缓存,重启服务器,可以解决

检查自己struts的配置文件<action>中注入的class是否正确

 

13.在做校验时,提示信息总是隐藏

我得正则表达式用if的时候写错了,代码没有加!,  即if(reg.test(val)),这样就变成了如果复合正则,那么报错。这里写错了。

查错步骤,将此页面所有关于隐藏这个提示信息框的代码前面加入alert(xx)代码,看看到底是被哪个隐藏掉的,然后从此着手查找错误

14.struts2配置日期转换时

1.convertFromString方法将一个或多个特定格式字符串的值转换为时间类型

2.converToString方法将一个时间类型的对象,转换为特定格式字符串的值

3.第一个方法不能跳入的话,请从日期的字符串格式入手,看这个格式是否与方法中的格式相匹配。

4.第二个方法不能跳入的话,请从传过来的日期类型入手,debug查看从数据库传过来的具体类型看是否与此方法中设置的 obj.getClass() == xx类型.class 相匹配.

15.前后端数据交互问题。以及标签对象的name属性,传值问题

首先,如果继承ActionSuport,那么在这个Action类中定义的成员属性或者对象(被赋予了set,get方法)那么都会被压入值栈中,所以可以直接用标签对象属性 name=“成员属性名”或 name=“对象名.其中属性名。”来直接取到其中的值

 

1.后端接收前端的值

如果继承ActionSuport的Action中的模型对象user。被创建,

即private User user = new User();并赋予其set,get方法。或者创建的成员属性xx,并赋予其set,get方法。

如果前端表单中的标签对象里的name属性(用于传值),name=”user.userId”(即new出来的对象 .  User中的属性)或者是name=(Action中定义的属性名)。  然后表单提交到的URL,即${path}/xxxx_xx,诸如此类格式的,Action中相同名字(xxxx_xx)的方法,并且配置到Struts.xml文件中。那么在提交之后,由于表单访问了这个方法,所以在这个方法之中就可以得到传过来的属性值,或是模型对象值(user)。因为user中有的属性,在表单中输入的值时,都被传过来了。所以user对象可以直接调用。

 

2.      前端调用后端的值

(1)        通过URL,经过Action中的方法,然后跳转到某页面,这整个页面(主要是表单)的一切需要引用Action中值的地方,  经过Action方法,必须是方法中得到的值,通过ActionContext context = ActionContext.getContext();

 context.put( “名字” , 对象 );   名字是前端用于接收值用的,单个值前端用<s:propertyvalue="#名字"/>接收。

如果是传入对象是集合类型,那么前端用专门输出集合的标签输出,如<s:iterator var=”xxx” value=”#名字”>

        <s:property value==”#xxx”/>

 </s:iterator>

Value这里传入的必须是集合,如果后台传入的是对象,但对象中有集合属性,并正是此时要被调用的集合,那么用#对象.集合属性即可。

 

 

         (2)【回写】如果是在Action类中,被定义了的对象或属性,并且被赋予了Set,Get方法,那么如果前端,通过URL:${path }/xxx_xx访问到了Action中的方法,在方法中得到了要使用的对象或者属性,那么这个Action中的属性与此对象和此对象中定义的属性(user中定义的属性),前端需要用到此对象和属性的标签的地方,都可以通过对象.属性名,     或者 属性名来得到回写。  如果未引用到,但经反复确认后,确认代码无误,那么可以

Project→Clean→项目名,清理缓存,还不行,就再清理tomcat缓存。再或者重新把项目加入tomcat中。最后即可

 

16.表中员工修密码项去掉,娶不到值

因为密码项的去掉,所以传过来的对象密码为空。所以在后台调用修改方法的时候需要新建一个修改方法进行修饰,将密码赋值给他,通过新传过来的对象的ID得到数据库中还未被修改的原数据的密码,然后将其赋给新对象,但新对象如果直接进行保存会出现  两个持久对象主键冲突的异常,这时只需要调用BeanUtils.copyProperties(A,B). 即将新对象的值赋给数据库中查出来的原对象,然后对原对象进行修改即可。

17.通过ID删除数据库对象,然后重定向到查询页面

只需要通过Action方法之后,然后在继承ActionSurpot的Action的Action中,定义一个String常量,然后返回他。在struts配置文件中,<result type=”redirect” name=”xxx常量”> 重定向页面</result>重定向页面还是访问Action中的,即再次通过Action方法进入到Sturut配置文件中,访问查询页面

18.!!!!!,分页在Action中的list方法,用context.put()加入了page对象。前端页面得不到page对象中的属性,但是可以遍历集合

经一通查验比对,是因为后端context.put(“page”,对象),中定义的是page,              而前端在用<s:itorator>遍历的时候,由于var定义的对象也为page,而后端页面穿过来的对象赋予的名字也是page,所以page对象被覆盖了,此时的page就只是#page.list这个集合。

所以分页的那个页面调用,#page.xxx,调用的实际是page.list集合中的xxx属性。而他里面根本没有这些属性,只是一个单纯的集合,所以读取不到数值,没有办法分页。将<s:itorator>中var定义的名字不要与后端的相同即可,即避免重名覆盖。

19.emp分配角色的方法时,从数据库用get(empId)方法得到了对象,然后重新为里面的角色集合赋值,无法添加进数据库

由于applicationContext.xml核心文件中的,<tx:method>标签中配置的方法首字母开头,(xxx*)这些是在service中被事务管理起来的,其他的方法开头是没有事务的,所以不能对数据库进行增删改操作,而我的方法开头是grant,<tx:method>中我没有配置这个开头的,所不能进行管理操作,所以失败,改为便签中开头的之后就成功了

 

20.jsp页面中的点击等时间失效问题

只要jsp中存在错误,可能会影响其他点击事件也失效,所以要保证所有时间都是正确无误的。即删除掉确定错误的事件,那正确的事件就会得到执行

 

21. 元素类型为 "package" 的内容必须匹配"(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?..

检查顺序,尤其是那种没有result返回值,不用跳转的。可能标签是<sahdfsha/>这样的,你加在了后面。不在他的里面,那面顺序就错误了。这样改就好了<sahdfsha>所加入代码</sahdfsha>

 

22. Association references unmapped class:xxx

这种错误是映射文件错误,就在.hbm.xml文件中和hibernate.cfg.xml文件中找,最后在模型中找。就可以找到

23.项目中的方法出现错误

用单元测试Junit的方法进行测试,那样比较快哦

24.设置的页码查不出东西,以及<s:selet>标签name如何写

<!-- 这里用query.supplierId接收前端传过去的数据的原因是,query对象要做为查询 -->

                       <!-- input那里用productType.supplier.supplierId接收Id的原因是后端要用到productType保存这个对象,

                       而他与supplier关联映射,映射表中的ID已经被注释掉,所以无法通过productType.supplierID来接收 -->

也就是说当直接用到模型的时候,如果此表中有另一张表的外键fkAction中本model模型,要得到ID就只能通过  本模型.(定义在本模型中的另一关联模型名).另一模型属性的ID来接收或传入数据

25.ABC三张表

A→B多对一,B→C多对一。  所以A与C之间存在着间接的联系。 如果A的前端需要引用C模型中的数据的话,那么在hbm映射表中配置好映射的情况下,

在hql语句创建的dao层里面,判断A . getB . getB里面定义的A . getA里面的ID, = :A里的ID(这个ID在query查询里,创建一个。用于接收前端传过来的值,方便查询)

26.出现查找不到数据库数据

在确定前端输出的代码无误后,并且因为之前的页面已经确定了公共方法也没有错误,那么95%是新的xxxdaoImpl中写的hql语句的代码出现了错误,请仔细查找。

27.option标签中value传递值

$("#productType").empty();

$("#productType").append("<option value=''>---请选择---</option>")

    varjsonArr = $.parseJSON(responseText);

    for(var i = 0; i <jsonArr.length; i++) {

//option标签里面的value获取的是productTypeID,因为标签里面的属于html元素,不能进行传值。而product所需要接收的为productTypeId,所以select中所需要传递的是也就是productTypeId,所以value中要将本Id写在value上,传过去

    $("#productType").append("<option value='"+jsonArr[i].productTypeId+"'>"+jsonArr[i].name+"</option>")

    }

28.重要的前端找错方法!!!!!

当在确认后端代码无误的情况下,程序报错,那么在前端出错的页面代码,删除全部,然后再运行,看是否还会报错,如果不会那么就是这个页面的某个地方。还原!然后将其中一部分删除,再运行。看是否会错。不会:那么继续还原,再删除另一部分。一点一点的缩小范围,最后就可以找到错误。!!!!!!!!!

29. There is a cycle in the hierarchy!JSON数组循环调用异常

用setExcludes()排除其中的不需要属性,以及必须排除的会出现循环调用的属性异常,

第一个是这个模型对象中的set集合的属性,第二个是调用他的那个model模型的属性。

如果清楚,可以把所有新建的模型属性干掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值