spring注入问题

wujia2009 2009-07-22 10:34:31
我写了个分页的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;
}
});
}
}
...全文
159 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Aishangwan 2009-07-23
  • 打赏
  • 举报
回复
顶一个。
jinxfei 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wujia2009 的回复:]
3楼说的有道理.项目启动的时候实例化了2次pageAction.但怎么让pageAction实例化一次呢???还是不能继承pageAction.直接用一个action把分页做了?
[/Quote]

我觉得你可以不继承,将PageAction改成PagingService,做成一个服务供Action调用。

用聚合代替继承。
gidiyi 2009-07-23
  • 打赏
  • 举报
回复
来学习学习了
zcqzcq 2009-07-23
  • 打赏
  • 举报
回复
<bean id="pageModel" class="这里写他的实现类。"/>

flyingfish1987 2009-07-23
  • 打赏
  • 举报
回复
请问这个地方为什么命名的时候:
<bean name="/pageAction" class="com.syaccp.salary.common.page.pageAcition.PageAction">
<property name="pageTemplate" ref="pageTemplate"/>
<property name="pageModel" ref="pageModel"/>
</bean>
name="/pageAction" 为什么要有个“/”呢?
wujia2009 2009-07-22
  • 打赏
  • 举报
回复
3楼说的有道理.项目启动的时候实例化了2次pageAction.但怎么让pageAction实例化一次呢???还是不能继承pageAction.直接用一个action把分页做了?
hey2009 2009-07-22
  • 打赏
  • 举报
回复
没发现哪里有错啊
jiannye 2009-07-22
  • 打赏
  • 举报
回复
spring 学习中 关注下
machao299 2009-07-22
  • 打赏
  • 举报
回复
up
老张-AI 2009-07-22
  • 打赏
  • 举报
回复
学习了
wujia2009 2009-07-22
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "struts-config_1_2.dtd" >
<struts-config>
<form-beans>
<form-bean name="pageform" type="com.syaccp.salary.common.page.pageform.Pageform"/>
</form-beans>

<action-mappings>
<action path="/pageAction"
name="pageform"
scope="request"
parameter="method"
>
</action>
</action-mappings>
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
<message-resources parameter="com.syaccp.salary.common.ApplicationResources"/>
<plug-in className="com.syaccp.salary.common.utils.UtilDataConvertInitWithPlugIn"/>
</struts-config>
wujia2009 2009-07-22
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sessionFactory" class="com.syaccp.salary.common.config.loader.SalaryLocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean name="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean name="commonService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="sel*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<bean id="pageModel" class="com.syaccp.salary.common.page.pageModel.PageModel"/>

<bean id="pageTemplate" class="com.syaccp.salary.common.page.pageTemplate.PageTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="pageModel" ref="pageModel"/>
</bean>

<bean name="/pageAction" class="com.syaccp.salary.common.page.pageAcition.PageAction">
<property name="pageTemplate" ref="pageTemplate"/>
<property name="pageModel" ref="pageModel"/>
</bean>
</beans>
hey2009 2009-07-22
  • 打赏
  • 举报
回复
你的spring与struts是怎么集成的
jinxfei 2009-07-22
  • 打赏
  • 举报
回复
我觉得楼主混淆了两个概念。

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

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

不信,你可以在这个类被实例化的时候设置唯一标识打印出来看看,肯定有多次实例化。
wujia2009 2009-07-22
  • 打赏
  • 举报
回复
写了的 <bean id="pageModel" class="com.syaccp.salary.common.page.pageModel.PageModel"/>
hey2009 2009-07-22
  • 打赏
  • 举报
回复
XML中你写了<bean name="pageModel" class="XX.PageModel"> 这个没

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧