现在的位置: 首页 > 综合 > 正文

工作总结

2013年11月15日 ⁄ 综合 ⁄ 共 6005字 ⁄ 字号 评论关闭

最近用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;

		else

			return 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即可

抱歉!评论已关闭.