工作总结
来源:互联网 发布:数据库设计e-r图 编辑:程序博客网 时间:2024/04/28 06:53
最近用ssh做个小东西,总结下:
1. struts 表单回显为空或者为乱码的问题,JSP页面用的是utf-8: 对这个问题最普通的场景就是对一条记录进行修改,在修改页面应该回显些记录的信息。 对这个问题,处理的方法是:在action中,不应该new 一个form,比如:ModuleForm moduleForm=new ModuleForm(); 而应该ModuleForm moduleForm=(ModuleForm)form;
2. 表格中记录号的显示问题 通过我们把记录以列表的形式显示出来的时候,都希望第一列显示行号,这个问题可以用JS解决,比如:table的id为main。
var obj = document.getElementById("main"); var startIndex = document.getElementById("startIndex").value; var rowNum = obj.rows.length; for (var i = 1; i < rowNum; i = i + 1) { obj.rows[i].cells[0].style.textAlign = "center"; obj.rows[i].cells[0].style.width = 20; obj.rows[i].cells[0].innerHTML = (parseInt(startIndex) + i).toString(); }3 iframe动态加载: 环境:当点击一个按钮时,改变ifream的src,这个src为.do,即请求一个Action处理业务。要求不刷新页面
<html><body><input type="button" value="changeit" onclick="changeIframe()" /><script language="javascript"> function changeIframe() { document.frames["hiddenframe"].document.location = '2.do'; }</script><iframe id='hiddenframe' src=''> </iframe></body></html>
4. 当返回一个页面时,刷新另外一个页面在返回页面中:
<html:messages id="item" property="flashUrl" message="true"> <input type="hidden" name="flashTarget" value="<bean:write name="item"/>"></html:messages><script type="text/javascript"> if(document.getElementById("flashTarget")!=null){ var windowTarget=document.getElementById("flashTarget").value; eval(windowTarget+".location.reload()"); }</script>在后台:ActionMessages requestMessages = new ActionMessages();requestMessages.add("targeturl", new ActionMessage("message.targeturl",Contains.BOARDS_LIST));this.addMessages(request, requestMessages);
5. 点击一个按钮,框架中树的大小由0变为200
parent.boards_container.framesetId.cols="200,*"; 其中framesetId为boards_container中的一个frameset元素的ID
6. struts+hibernate+spring的DAO层设计:
设计一个通用DAO接口,再设计一个实现该接口的实现类DAOIMPL
public interface BaseHibernateDao<T>{public T get(Serializable id) ;public List<T> getAll();}public class BaseHibernateDaoImpl<T> extends HibernateDaoSupport {private Class<T> entityClass;public BaseHibernateDaoImpl() {Type genType = getClass().getGenericSuperclass();if (genType instanceof ParameterizedType) {Type[] params = ((ParameterizedType) genType).getActualTypeArguments();entityClass = (Class<T>) params[0];}}public Class getEntityClass() {return entityClass;}}
再设计我们自己的系统DAO,可以有多个[在J2EE框架设计中,多个DAO对应一个DAO实现类,可以考虑下]
public interface UserDao extends BaseHibernateDao<User>{}public class UserDaoImpl extends BaseHibernateDaoImpl<User> implements UserDao {}
因为UserDaoImpl继承自BaseHibernateDaoImpl,而BaseHibernateImpl继承自HibernateDaoSupport ,所以
在UserDaoImpl中不用定义SessionFactory 及其get/set方法,因为HibernateDaoSupport 中有,Spring的配制
如下:
<bean id="daoTemplate" abstract="true"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="userDaoTarget" class="com.songbx.console.dao.impl.UserDaoImpl" parent="daoTemplate"/>
而HibernateDaoSupport 不用配
7.分页的代码:
package com.songbx.common.page;import java.util.ArrayList;import java.util.List;public class Page implements java.io.Serializable {private int currentOfPage;//当前页号private int sizeOfPage = Constants.DEFAULT_PAGE_SIZE;//每页的记录数private int totalOfRecords;//总记录数private Object resultList;//当前页中存放的记录public int getCurrentOfPage() {return currentOfPage;}public int getSizeOfPage() {return sizeOfPage;}public int getTotalOfRecords() {return totalOfRecords;}/** * 构造方法,只构造空页 */public Page() {this(1,Constants.DEFAULT_PAGE_SIZE , 0, new ArrayList());}/** * 默认构造方法 * @param currentOfPage 当前页码 * @param sizeOfPage 每页记录数 * @param totalOfRecords 总记录数 * @param resultList 当前页包含的数据 */public Page(int currentOfPage, int sizeOfPage, int totalOfRecords, Object resultList) {this.currentOfPage = currentOfPage;this.sizeOfPage = sizeOfPage;this.totalOfRecords = totalOfRecords;this.resultList = resultList;}/** * 取总页数 */public int getTotalOfPage() {if (totalOfRecords % sizeOfPage == 0 && totalOfRecords!=0)return totalOfRecords / sizeOfPage;elsereturn totalOfRecords / sizeOfPage + 1;}/** * 是否有下一页 */public boolean hasNextPage() {return (this.currentOfPage < this.getTotalOfPage());}/** * 是否有上一页 */public boolean hasPreviousPage() {return (this.currentOfPage > 1);}/** * 是否有第一页 */public boolean hasFirstPage() {return (this.currentOfPage !=1);}/** * 是否有第一页 */public boolean hasLastPage() {return (this.currentOfPage !=getTotalOfPage());}/** * 取当前页的记录 */public Object getResultList() {return this.resultList;}/** * 记当前页第一条记录在数据库中的编号 * @param currentOfPage * @param sizeOfPage * @return */public static int getStartOfPage(int currentOfPage,int sizeOfPage){return (currentOfPage-1)*sizeOfPage;}/** * 产生分页信息 */public static String generatePageInfo(Page page,String url){if(page==null){return null;}StringBuffer sb=new StringBuffer();if(page.hasFirstPage()){sb.append("<a href=/""+url+"?currentPage=1/">第一页</a>");}if(page.hasPreviousPage()){sb.append("<a href=/""+url+"?currentPage="+(page.getCurrentOfPage()-1)+"/">上一页</a>");}sb.append("第<font color=red>"+page.getCurrentOfPage()+"</font>页");sb.append("共"+page.getTotalOfPage()+"页");sb.append("共"+page.getTotalOfRecords()+"条");if(page.hasNextPage()){sb.append("<a href=/""+url+"?currentPage="+(page.getCurrentOfPage()+1)+"/">下一页</a>");}if(page.hasLastPage()){sb.append("<a href=/""+url+"?currentPage="+page.getTotalOfPage()+"/">最后页</a>");}return sb.toString();}}
在DAO中:
/** * HQL分页查询,可以指定具体的模式, 采用getCount方式,须在此层完成hsql的转换与查询。 * 注意参数Object...args的应用,可以在查询的设置查询条件用的(JDK5.0语法) */public Page pagedQuery(String hql, int pageNo, int pageSize, Object[] args) {Assert.hasText(hql);Query query = getSession().createQuery(hql);List countlist = null;String countQueryString = " select count (*) "+ HibernateTools.removeSelect(HibernateTools.removeOrders(hql));if (args != null) {for (int i = 0; i < args.length; i++) {query.setParameter(i, args[i]);}countlist = getHibernateTemplate().find(countQueryString, args);}else{countlist = getHibernateTemplate().find(countQueryString);}int totalCount = Integer.parseInt(countlist.get(0).toString());Page page= getPageResult(query, totalCount, pageNo, pageSize);return page;}public Page getPageResult(Query q, int totalCount, int pageNo, int pageSize) {if (totalCount < 1)return new Page();int startIndex = Page.getStartOfPage(pageNo, pageSize);List list = q.setFirstResult(startIndex).setMaxResults(pageSize).list();return new Page(pageNo, pageSize, totalCount, list);}
在Action中:
Page page = systemService.getBoardPage(currentOfPage, sizeOfPage);request.setAttribute("pageInfo", Page.generatePageInfo(page, request.getContextPath()+ "/listBoardsAction.do"));
然后在页面上得到这个pageInfo即可
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 工作总结
- 为 IDES471 激活中文
- NetBeans 时事通讯(刊号 # 11 - Jun 11, 2008)
- go
- 范跑跑,你真行!
- 创建带 Custom Tool Part的Web Part
- 工作总结
- UPS电源
- C#编码规范
- 为什么
- SaaS
- Oracle数据库无法加载_OraMTS_的解决办法
- VS2005快捷键大全
- Windows下Openssl安装以及编程
- [J2EE从入门到精通第1讲]搭建Eclipse+MyEclipse+tomcat开发环境