`

Struts2 + Hibernate + Spring 以及javaweb模块问题解决(1)

阅读更多

Struts2 + Hibernate + Spring 以及javaweb模块问题解决

1.资源文件的配置:src文件夹里面要配置,action所在的目录中也要配置。

2.<s: actionerror/> addActionError相对应,若出错信息为addFieldError 则删去<s: actionerror/>

3.在使用validation验证器时int 类型的数据需要封装在integer类型中,否则会抛出异常;

日期类型不用转化,貌似重启服务器,重新打开网页就好。

4.mysql 中文显示问题:在修改编码或重新安装之后,重新建立一个数据库即可实现中文的输入与显示。

5.mysql 安装过程中不要选择standard configuration(在此情况下不能选择mysql 编码的设置),在另外一种configuration 中选择第三个gbk 编码即可,结合上面第三点,中文显示问题解决。

6.hibernate 在执行对对象的保存和更改操作时,需要调用beginTransaction(),getTransaction()事务方法,不必执行executeUpdate相关方法;而对于按id执行删除相关操作时,因为调用了createQuery方法来执行hql语句,所以不需再调用事务开启和提交的方法,但是必须执行executeUpdate相关方法,因为对数据库内部进行了操作

  对数据库内部进行操作时,必须有事务提交和开启两个方法,或者执行hql语句后,调用executeUpdate()方法。

  id查询数据库中的数据时,由于并没有对库中数据进行“破坏”,所以“下划线”中所对应的方法不用调用。

  事务方法是对数据库内部数据进行操作,executeUpdate同样也是对数据进行修改。

7.在处理业务逻辑层和持久化层时,都用到了按id查询的方法,但是该方法在两个层中的作用是不同的,在业务逻辑层的方法是真正满足用户需求的查找方法,而在持久化层的方法是

1)为了给业务逻辑层提供判断(该id是否重复);(2)查找方法。

8.创建hibernate 时,在先创建springjdbc包)的前提下数据库驱动才能以spring的方式构造出来。要修改dataresource class org . springframework . …… 可以用快捷键导出(导入spring jdbc包的作用),否则不行。

9.在设计两个维度的自由组合时,可以使用bridge 桥接模式进行设计。

10.在构建SSH框架时,应先构建struts2springhibernate(连接数据库驱动以Spring的形式),myeclipse web xml tester 的方式打开Spring形式的数据库驱动(xml),改掉dataresource class的名称。

11.强大的Myeclipse 8.0 SSH框架下,在第10点的基础上,不用手工创建持久化类,以及相应的映射文件,还有SessionFactory 方法的重写(在代码后面加入了加载映射文件的代码),此外在实现DAO实现类时也可以进行自动创建。这一切都要依靠在Myeclipse里面进行数据库连接的配置,在网址http://blog.163.com/s2000_ma/blog/static/1320144902009101045237301/中详细描述了这些东西。

12.在整合SSH项目的时候,tomcat服务器会抛出异常,原因是spring2.5hibernate3.0整合时jar包出现重叠,由于部署时是MyEclipse自动导入jar包,导致删除jar很不方便。具体做法是:在工具栏上点击MyEclipseàpreferenceàMyEclipseàproject Capabilitiesàspring2.5à选中asm-2.2.3.jarà点击remove即可。在项目中进行刷新,此jar包在工程之中的spring2.5 liberary中消失。如想恢复,则在相应的选项中选择restore default进行还原。只有这种方法可以进行删除Myeclipse Liberary中多余的jar包。

13.在进行springstruts2整合时,beanàid actionàaction.class 中的对象名必须相同。

14.在配置strutsaction时,当action属性中的result对应的结果是一个action名称,(此action对应一个跳转的页面),在这种情况下在原来的result配置里应加入type=”redirect”

15.struts2中解决中文问题的方法很简单,即在struts.xml中配置<constant name="struts.i18n.encoding" value="gb2312" />(value的值应该根据页面的编码格式而定)即可,貌似添加过滤器fiter是没有作用的。(SSH项目中有所体现)

16.数据库与hibernate默认值的问题:

http://www.iteye.com/topic/368809网址上讲的很详细,或者直接在数据库中将所需的值设置成“自动递增”。(Identity  assign则不用,因为是系统默认的自动递增形式。

17Struts2  NameSpace作用:

 

18Struts2 jsp路径问题:

Struts2的路径问题是根据action 的路径而不是根据jsp 的路径,所以尽量不要使用相对路径。在myeclipse 中的jsp文件中系统会自动创建basepath的绝对路径,所以只要在链接地址前加入<%=basepath %> 即地址变为“<%=basepath %>xxxxx.jsp”。

19.

 

20.在定义JavaScript的函数时,函数名尽量不要使用alert(),clear()等等,使用自己命名的最好。

21. 编写SSH框架下的持久化层(DAO),在执行getHibernateTemplate(XX)方法需要从某个表中取出数据时,XX应为from+与表对应之的抽象类名称,其限制条件where中的属性应为抽象类中对应表中属性的属性,不能想当然的与表联系起来。否则在执行返回List时,会有指针为空的异常抛出。

22.  SSH_Bookshop项目中,一个action类中对应有很多控制方法,此时以spring<bean>方式导入的成员变量bookDetailService,需定义成静态类型的成员变量,因为静态变量可以通过类访问。不然,则会报出指针为空的异常。

23. 在前台访问action中的List ul时,需要对ul注入settergetter方法,否则需要把ul作为参数传递到前台。总之,注入settergetter方法,可以使得前台访问action中的数据,action访问前台中的数据。

24. struts2异常处理:(全局异常处理,跳转到error.jsp页面)

 

25. struts2jsp页面所对应的action应注意:

  例如:如果jsp页面是在 / bbs / xx.jsp目录下(不是系统默认的目录),那么对应的action的命名空间,即namespace,也应该设置成 / bbs 。否则系统将找不到对应的action,会有异常抛出No result defined for action com.bbs.action.LoginAction and result input

26.htmlform表单的action="/url"(/开头的url地址),其会从http://127.0.0.1:8080这个根开始附加,我们要访问具体信息必需要加上

项目的上下文(context),就是tomcat安装目录下wepapps/context(具体是你工程名字)这个文件夹名字,象这样

<form action="/Struts2Study/namespace/test.jsp" method="post">

strutsform标签的action="/url"(/开头的url地址),struts2帮我们作了优化,他会自动为我们在htpp://127.0.0.1:8080/后面加上

项目的上下文,再附加action后的url,而这也是我们开发时想要的本意,象这样<s:form action="/namespace/test.jsp">

其余的都是一样的

action="url" action="./url" 都表示当前路径

action="../" 表示上级路径

27.hibernate 抛出异常:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionExce

ption;Lantlr/collections/impl/BitSet;)V 

   问题找出来了,原来真的是语法(Syx什么异常)的错误.从网上粘贴的代码,与开发环境的字符处理不一致造成.

看起来正确的代码也会隐藏着格式错误导致编译错误


什么时候会出现这样的情况呢?


一般从网上直接复制,粘贴的代码会出现字符编码与开发环境不一样,空格占位长度处理不一致导致编译出错.
这种错误一般很难发现
.

如何避免呢
?

首先尽量手写代码
.
其次首先把网上复制的代码保存到记事本以纯文本格式保存,然后再复制出来粘贴到开发环境中.

28.        hibernate HQL语言 hql = "from Boards where bdid=" + boardId; boardIdint类型所以和String类型的属性值写法上有区别:hql = "from Users as b where b.username='" + userName + "'"; userNameString类型。

29.        在判定用户登录的时候,用户名,密码等等的if判断为空的条件都应为:if(userName == null || "".equals(userName.trim()))

30. hibernate 加入注解时应加入的jar包:(过时了,3.5开始支持注解,不用再加入以下三种jar包了,但是需要hibernatevalidation产品,才能对属性进行非空、长度等等的约束验证)

 

31.hibernate运行时log4j的警告 

   Log4J.properties其实是个日志文件,hibernate本身使用的是slf 日志 ,要想使用Log4J.properties需把原先slfjar包删除,引入slf-log4j的转换jar包,再把Log4J.properties加入到项目中即可。(马士兵视频第九分钟。)D:\myeclipse 构建\hibernate-distribution-3.5.2-Final\project\etc这个目录中有Log4J.properties的日志文件,复制到项目中即可。

32.脚本页面显示问题

  <%@taglib prefix="sx" uri="/struts-dojo-tags" %>

 

  <base href="<%=basePath%>"> <sx:head /> 在网页显示时会有冲突,注释掉前者即可。

33.html标签和struts标签取值的区别:

<input type="text" id="USERNBR" name="regcorpuser.USERNBR" value="<s:property value="regcorpuser.UADD"/>" class="medium" dojotype="dijit.form.ValidationTextBox" required="true" trim="true" onblur="UserIsRegDwr()" promptmessage="用户代码以字母开头,只能包含字符、数字和下划线" invalidmessage="请确认用户代码以字母开头,只能包含字符、数字和下划线,长度在1~20之间" regexp="[a-zA-Z]\w{1,19}" />

Value中嵌套strutsproperty标签即可取出action中的值

<s:textfield id="USERNBR" label="管理员代码" name="regcorpadmin.USERNBR"

class="medium" dojotype="dijit.form.ValidationTextBox" required="true" trim="true" onblur="UserIsRegDwr()" invalidmessage="请输入管理员代码" />

struts标签中有name属性即可。

34Spring事务提交

Springxml的配置文件中,应该对相应的DAO类创建事务代理,才能有saveupdatedelete方法的实现,否则会出现数据在服务器中可以查询,但不能保存到数据库中的情况。

具体例子参照BSP项目的配置。

35Ajax url传值乱码:

    两次加密和两次解密的过程

客户端url要经过两次加密var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+new Date().getTime();   

  1. url = encodeURI(url);   
  2. url = encodeURI(url);   

服务器端经过两次解密

  1. String word = request.getParameter("word");   
  2. word = java.net.URLDecoder.decode(word,"UTF-8");   

方可得到中文

36.浏览器的选择:

   在编写项目是经常会用到各种浏览器,个人感觉火狐浏览器(能够更好地对java脚本以及ajax支持)非常好。

37.数据库主键:

   最近在做项目时,发现书中所列举的项目有几张表中定义了“双主键”,其中的数据在单个主键中出现了重复的现象,数据仍可保存,个人认为双主键可以看作是一个大的整合主键,仍不违背主键不重复的原则。例如:

          Idname 两个都是主键(双主键)

1          小明

1   小军

   这样的数据是可以进行保存的。

38.String类型的判断:

   最近在做项目时,遇到了String为空的情况,在执行时虽然有ifstring == “”)的判断,但是仍然不能符合需求,需加入ifstring == “” || string == null

39.数据库数据类型的选择:

在数据库中,电话(类似于号码)的字段,其数据类型应该为intvarchar类型,如果用double的话,取出其数据时会有**.0作为结尾,故在页面中用strutsiterater标签做遍历时比较难于处理,故应放弃double类型作为“电话”等的数据类型。

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics