基于struts的web应用开发总结(三)
1.应用开发常常从数据库取出数据来处理。而数据库的数据有可能是从excel或其它工具导入的,所以字段值可能含有不可预知的空格或回车换行。这时候,我们取出了字段值,在处理它之前要用正则进行replace处理。如:
param01.crs.getString(2).replaceAll("\n", "")
同时,我们一般写sql的时候,最好有意识地加上trim()去除空格。
另外,有时,我们在action端用printwriter常常写成了println(),而不是print(),这时候前台获取到值后,进行处理,这时候要考虑是否要把\n替换掉。如:
returnstr.replace(/[\r\n]/g,"")
同时,对于正则再了解一下。
2.request.getParameter与request.getAttribute不一样
在action里用getParameter来获得表单值,通过request.setAttribute放到request里,在前台取的话用<%=request.getAttribute%>。但是,有一次我写成了<%=request.getParameter%>。结果调试了好久。记下,以备录。
另外,在jsp里取action的变量,也是用<%=%>的方式。这种写法我自己写得比较少。如下:
<%String url="aaa"%>
<span><%=aaa%></span>
3.
一般我们在jsp里用<%=request.getContextPath%>来取得contextPath,而最好不要写死掉。如我本地时原工程名用eim_web,但是在实施环境下的工程名是用eim。这时候如果程序写死了,则实施环境就有问题了。出现的症状是.do请求的action老是进不去。查了才知道是这个问题。记录下,以备录。
4.
在用dhtmlxtab时,如果用js来create tab,要放在<body></body>之间。我就是没有注意,放在<head></head>之间了,出现了什么“is null”的问题,发了不少时间。但是不用js,直接写成<div>来生成tab的话,却可以放在<head></head>之间。其实用js来生成,更加灵活。记下,发备录。
?
5.
一个main.jsp,有如下几个iframe:head.jsp,navigate.jsp,content.jsp.footer.jsp。其中navigate.jsp只占了一个很小的区域,放置菜单栏。这时候想在navigate.jsp里加上一个小图标,打开一个查询通讯录的页面。如果打开通讯页面用window.open()或showModalDialog都没有问题。但是如果用打开一个浮动层div, 这个div里包含通讯录jsp的内容。那么这个浮动div就会显示在navigate.jsp内,而navigate.jsp高度很小,则浮动div的内容实质上是看不到的。解决的办法是把浮动div写在main.jsp里,同时在main.jsp里写一个show浮动层的js函数,然后在navigate.jsp里调用这个父窗体(main.jsp)的这个js函数即可。其实认真想想,这就是作用域的知识点。
?
6.对自定义标签的理解
什么时候写成自定义标签?本来因为正在做下拉提示的通讯录查询模块。想把这个有下拉提示的txt封装成自定义标签。后来发现没有这个必要,因为就一个txt,其实的所有需要解决的都在于这个txt点击后去构造一个浮动层。而自定义标签的重点应该是放在据传入的参数来构造不同的显示。
?
7.重构代码步骤:
1).
?