我的SSH项目之旅(7.个人中心之分页和Junit测试)

本文介绍了一个基于Struts和Hibernate的个人中心分页功能实现方案,涵盖了后端数据查询、Struts Action处理流程及JSP页面展示等内容。

接下来开发个人中心

 

个人中心包括内容:
1、 修改个人信息
2、 列出我提出的问题
3、 列出我回答过的问题
4、 列出被采纳的问题
分页大概的流程 从后台DAO去数据

  public List queryByItem(int itemid, int currentPage, int lineSize)
      throws Exception {
    // TODO Auto-generated method stub
    List all = null;
    String hql = "FROM Question AS q WHERE q.itemid=?";
    Query q = super.getSession().createQuery(hql);
    q.setInteger(0, itemid);
    q.setFirstResult((currentPage - 1) * lineSize);
    q.setMaxResults(lineSize);
    all = q.list();
    return all;  
  }




经过struts action


public ActionForward selectitem(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response) {
    List all = null;
    int currentPage = 1;
    int lineSize = 10;
    int allRecorders = 0;
    try {
      currentPage = Integer.parseInt(request.getParameter("cp"));
    } catch (Exception e) {
    }
    try {
      allRecorders = this.questiondao.getByItemCount(Integer
            .parseInt(request.getParameter("itemid")));
      all = this.questiondao.queryByItem(Integer.parseInt(request
            .getParameter("itemid")), currentPage, lineSize);
    } catch (NumberFormatException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    request.setAttribute("currentPage", currentPage);
    request.setAttribute("lineSize", lineSize);
    request.setAttribute("allRecorders", allRecorders);
    request.setAttribute("all", all);
    request.setAttribute("jspUrl", "show.do");
    request.setAttribute("status", "selectitem");
    request.setAttribute("flagname", "itemid");
    request.setAttribute("flagvalue", request.getParameter("itemid"));

    try {
      request.setAttribute("allitem", this.itemdao.queryAll());
    } catch (Exception e) {
      e.printStackTrace();
    }

    return mapping.findForward("showlist");

  }









JSP页面嵌入相关代码


  <jsp:include page="split_page.jsp">
    <jsp:param name="jspUrl" value="${jspUrl}" />
    <jsp:param name="lineSize" value="${lineSize}"/>每页显示条数
    <jsp:param name="allRecorders" value="${allRecorders}" />
    <jsp:param name="keyWord" value="<%=request.getAttribute("keyWord")%>" />
    <jsp:param name="currentPage" value="${currentPage}" />
    <jsp:param name="status" value="${status}" />
    <jsp:param name="flagname" value="${flagname}" />
    <jsp:param name="flagvalue" value="${flagvalue}" />
    <jsp:param name="searchFlag" value="T" />
  </jsp:include>

分页程序部分代码 split_page.jsp

// 计算总页数
  pageSize = (allRecorders+lineSize-1)/lineSize ;

<form name="spage" action="<%=jspUrl%>" onSubmit="change()">
<input type="hidden"
  name="status" value="${status}"> <input type="hidden"
  name="${param.flagname}" value=${param.flagvalue}> <%
if ("T".equals(searchFlag)) {
%> 输入查询关键字:<input type="text" name="kw"
  value="<%=keyWord.equals("null") ? "" : keyWord%>"> <input
  type="submit" value="查询"> <br>
<br>




<%
if (allRecorders > 0) {
%> <input type="button" value="首页" onClick="openPage(1)"
  <%=currentPage == 1 ? "disabled" : ""%>> <input type="button"
  value="上一页" onClick="openPage(<%=currentPage - 1%>)"
  <%=currentPage == 1 ? "disabled" : ""%>> <input type="button"
  value="下一页" onClick="openPage(<%=currentPage + 1%>)"
  <%=currentPage == pageSize ? "disabled" : ""%>> <input type="button"
  value="尾页" onClick="openPage(<%=pageSize%>)"
  <%=currentPage == pageSize ? "disabled" : ""%>> <input type="hidden"
  name="cp" value=""> <font color="red" size="5"><%=currentPage%></font>
/ <font color="red" size="5"><%=pageSize%></font> 跳转到 <select
  name="selpage" onChange="selOpenPage()">
  <%
  for (int x = 1; x <= pageSize; x++) {
  %>
  <option value="<%=x%>" <%=currentPage == x ? "selected" : ""%>><%=x%></option>
  <%
  }
  %>
</select> <%
}
%>

Spring Junit4测试

public class UserDAOTest extends AbstractDependencyInjectionSpringContextTests { @Override复写父类的方法,找到配制文件 protected String[] getConfigLocations() { // TODO Auto-generated method stub return new String[]{"classpath:applicationContext.xml"}; } //引入在Spring注入的bean private UserDAO userdao; public void setUserdao(UserDAO userdao) { this.userdao = userdao; } public void testLoadUser() throws Exception{ // User user=this.userdao.queryByUserid("fantlam"); // assertNotNull(user); boolean b=this.userdao.isExists("fantlam", "你在吗", "我在"); assertEquals(true,b); } //可以直接运行程序 public static void main(String[] args){ // junit.swingui.TestRunner.run(UserDAOTest.class);因为conmon-logging的原因,使用junit.awtui或junit.swingui包下的TestRunner会出现错误/ 故采用junit.textui包 junit.textui.TestRunner.run(UserDAOTest.class); } }


 

 

applicationContext.xml
  <bean id="userdao" class="dj.fantlam.myssh.dao.UserDAO"
    abstract="true">
  </bean>
<bean id="userdaoimpl" class="dj.fantlam.myssh.daoimpl.UserDAOImpl"
    parent="userdao">
    <property name="sessionFactory">
      <ref bean=" sessionFactory " />
    </property>
  </bean>

关于spring junit测试的类关系

org.springframework.test

Class AbstractTransactionalDataSourceSpringContextTests

java.lang.Object

junit.framework.Assert

    junit.framework.TestCase

      org.springframework.test.ConditionalTestCase

        org.springframework.test.AbstractSpringContextTests

            org.springframework.test.AbstractSingleSpringContextTests

              org.springframework.test.AbstractDependencyInjectionSpringContextTests

                org.springframework.test.AbstractTransactionalSpringContextTests

                    org.springframework.test.AbstractTransactionalDataSourceSpringContextTests

All Implemented Interfaces:

Test








org.hibernate.QueryException: could not resolve property: qid of: dj.fantlam.myssh.vo.Answer [SELECT COUNT(q.qid) FROM dj.fantlam.myssh.vo.Question AS q WHERE q.qid IN (SELECT a.qid FROM dj.fantlam.myssh.vo.Answer AS a WHERE a.userid=?)]

解决方法:
answer.hbm.xml添加属性
    </property>
          <property name="qid" type="java.lang.Integer">
        <column name="qid" />
    </property>

加入
<many-to-one name="question"
    class="dj.fantlam.myssh.vo.Question" fetch="select"
    insert="false" update="false">
    <column name="qid" />
    </many-to-one>

这样做了之后的确可以解决问题,但破坏了表的关联属性,导致无法进行其它插入等操作,所以这种方法不行。
根据表的一对多的关系,把整个HQL语句改成
  String hql = "SELECT COUNT(q.qid) FROM Question AS q WHERE q.qid IN (SELECT a.question.qid FROM Answer AS a WHERE a.userid=? AND status=?)";
然后把之前改过的东西还原回来(把红色的都去掉) 这样就没问题了
内容概要:本文围绕“基于超局部模型与自抗扰ESO观测器的无模型预测电流控制改进策略”展开研究,提出一种结合超局部模型(ULM)与扩张状态观测器(ESO)的无模型预测电流控制(MFPCC)改进方法,旨在提升永磁同步电机(PMSM)电流环的动态响应性能与抗干扰能力。该策略利用超局部模型对系统行为进行局部逼近,避免依赖精确数学模型,同时引入自抗扰控制中的ESO实时观测并补偿系统内外部扰动,有效抑制参数摄动、负载变化及模型不确定性带来的影响。研究通过Simulink搭建完整的控制系统仿真模型,对传统MFPCC与所提改进策略进行对比分析,验证了新方法在电流跟踪精度、响应速度鲁棒性方面的优越性。; 适合人群:具备电机控制、现代控制理论及Simulink仿真基础的电气工程、自动化及相关专业的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高性能电机驱动系统中电流环控制器的设计与优化;②为无模型控制与自抗扰控制的融合应用提供技术参考;③支撑相关课题的仿真验证、论文复现与创新方法研究。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制结构与参数整定过程,重点关注ESO的观测性能与扰动补偿机制,并可通过改变负载条件、参数偏差等工况进行鲁棒性测试,进一步掌握该改进策略的核心优势与适用边界。
内容概要:本文围绕Scratch图形化编程平台,详细阐述了《人体感应灯光系统》这一贴近生活的AI科创作品的设计与教学应用。通过模拟真实智能家居中人体感应灯的工作原理,利用Scratch的侦测、逻辑判断、亮度特效调节等功能,实现了人物靠近自动亮灯、延时熄灭及环境亮度自适应等仿真功能。文章系统拆解了从场景搭建、核心逻辑设计、分层编程实现到调试优化的完整开发流程,并提供了基础版与进阶版可直接导入的源码,支持零基础快速上手与高阶创新拓展。同时构建了“基础—进阶—高阶”三层阶梯式教学体系,适配常规课堂、创客社团与赛事培优等多元教学场景,推动中小学AI教育的生活化、实践化与创新化发展。 适合人群:小学高年级至初中阶段学生,信息技术教师,创客教育从业者,以及参与青少年科创赛事的师生。 使用场景及目标:①作为中小学人工智能通识课程的教学案例,帮助学生理解智能感应与控制逻辑;②用于校内创客社团开展项目式学习;③支撑学生参加AI科创类赛事,完成高质量作品创作与答辩准备;④布置为课后综合实践作业,提升动手能力与科技素养。 阅读建议:建议结合提供的Scratch源码进行实践操作,在复现基础上尝试参数调优与功能扩展,如增加音效提示、多区域感应等,深化对编程逻辑与智能系统设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值