读书人

spring注入有关问题

发布时间: 2012-01-07 21:41:55 作者: rapoo

spring注入问题
我写了个分页的pageAction.所有要分页的action都继承pageAction

pageActoin中的pageModel(分页组件),pageTemplate(分页的查询方法)是spring注入的.

pageModel中的pageNo设置了默认值为1,pageSize默认值为2

但在pageAction中取值都是空

xml
<bean name="/pageAction" class="com.syaccp.salary.common.page.pageAcition.PageAction">
<property name="pageTemplate" ref="pageTemplate"/>
<property name="pageModel" ref="pageModel"/>
</bean>

pageAction代码:
public class PageAction extends DispatchAction {

private PageTemplate pageTemplate;

private PageModel pageModel;

public void setPageModel(PageModel pageModel) {
this.pageModel = pageModel;
}

public void setPageTemplate(PageTemplate pageTemplate) {
this.pageTemplate = pageTemplate;
}

public ActionForward queryPage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse reponse,String modelName,String conditionfinal) throws Exception {
Pageform pageform = (Pageform)form;
if(pageform==null || pageform.getPageNo()==0) {
int pageNo = pageModel.getPageNo(); 这里值为空
int pageSize = pageModel.getPageSize(); 这里值为空
pageModel = pageTemplate.query(modelName, null, null,pageNo,pageSize);
}else {
BeanUtils.copyProperties(pageModel, pageform);
pageModel = pageTemplate.query(modelName, null, pageModel.getOrderName(), pageModel.getPageNo(), pageModel.getPageSize());
}
request.setAttribute("pageModel", pageModel);
return mapping.findForward("sessuce");
}
}

pageModel代码:
/**分页组件
* @author Administrator
*
*/
public class PageModel {

//总页数
private int totalPage;
//结果集
private List resultList;
//当前页码
private int pageNo=1;
//记录条数
private int pageSize=2;
//第一页
private int topPage;
//上一页
private int upPage;
//下一页
private int nextPage;
//最后一页
private int lastPage;
//排序名称
private String orderName;

//最后一页
public int getLastPage() {
return this.totalPage;
}

public void setLastPage(int lastPage) {
this.lastPage = this.totalPage;
}
//下一页
public int getNextPage() {
return nextPage;
}

public void setNextPage(int pageNo) {
if(this.pageNo >= this.totalPage) {
this.nextPage = this.totalPage;
}else {
this.nextPage = this.pageNo+1;
}
}
//当前页码
public int getPageNo() {
return pageNo;
}

public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
//显示记录
public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
//第一页
public int getTopPage() {
return 1;
}

public void setTopPage(int topPage) {
this.topPage = 1;
}
//总页面数
public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
//上一页
public int getUpPage() {
return upPage;
}

public void setUpPage(int pageNo) {
if(this.pageNo <= 1) {
this.upPage = 1;
}else {
this.upPage = this.pageNo - 1;
}
}

public List getResultList() {
return resultList;
}

public void setResultList(List resultList) {
this.resultList = resultList;
}

public String getOrderName() {
return orderName;
}

public void setOrderName(String orderName) {
this.orderName = orderName;
}

}

pageTemplate代码:
public class PageTemplate extends HibernateDaoSupport {



private PageModel pageModel;

/**
* @param pageModel 要设置的 pageModel
*/
public void setPageModel(PageModel pageModel) {
this.pageModel = pageModel;
}

/**
* 查询总记录数
* @param tableName 表名
* @param conditionfinal 条件.无条件用null或""
* @return
*/
public int getTotalCount (String tableName,String conditionfinal) {
Session session = this.getSession();
String hql = "select count(*) from "+tableName;
if(conditionfinal!=null && !"".equals(conditionfinal))
hql += " "+conditionfinal;
Object totalCount = session.createQuery(hql).uniqueResult();
return new Integer(totalCount.toString());
}

/**
* 分页查询
* @param tableName 表名
* @param conditionfinal 条件,无条件用""表示
* @param pageNo 当前页码
* @param pageSize 每页显示
* @param orderName 排序名称,无名称用""表示
* @return
* @throws Exception
*/
public PageModel query(final String tableName,final String conditionfinal,final String orderName,final int pageNo,final int pageSize) throws Exception {
return (PageModel)this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
String hql = "from "+tableName;
if( conditionfinal!=null && !"".equals(conditionfinal)) {
hql += " "+conditionfinal;
}
if(orderName!=null && !"".equals(orderName)) {
hql += " order by "+orderName;
}
Query query = session.createQuery(hql);
List resultList = query.setFirstResult((pageNo-1)*pageSize).setMaxResults(pageSize).list();
pageModel.setPageNo(pageNo);
pageModel.setPageSize(pageSize);
pageModel.setTotalPage(getTotalCount(tableName,conditionfinal)/pageSize);
pageModel.setUpPage(pageNo);
pageModel.setNextPage(pageNo);
pageModel.setResultList(resultList);
return pageModel;
}
});
}
}

[解决办法]
XML中你写了<bean name="pageModel" class="XX.PageModel"> 这个没

[解决办法]
我觉得楼主混淆了两个概念。

Spring的Bean是由Spring的IoC容器初始化并管理依赖关系,
而Action是由Struts在每次处理页面请求的时候创建的。

所以,你所用到的Action,并非Spring中的/PageAction这个bean。

不信,你可以在这个类被实例化的时候设置唯一标识打印出来看看,肯定有多次实例化。
[解决办法]
学习了
[解决办法]
up
[解决办法]
spring 学习中 关注下
[解决办法]
顶一个。
[解决办法]
<bean id="pageModel" class="这里写他的实现类。"/>


[解决办法]
请问这个地方为什么命名的时候:
<bean name="/pageAction" class="com.syaccp.salary.common.page.pageAcition.PageAction">
<property name="pageTemplate" ref="pageTemplate"/>
<property name="pageModel" ref="pageModel"/>
</bean>
name="/pageAction" 为什么要有个“/”呢?

读书人网 >J2EE开发

热点推荐