首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

初学者,高分求解决方案

2012-03-30 
菜鸟,高分求解决方案!前前后后我的小项目还是写了有2个月了。基本功能都达到了预期效果,但现在有三个问题没

菜鸟,高分求解决方案!
前前后后我的小项目还是写了有2个月了。基本功能都达到了预期效果,但现在有三个问题没什么太好的办法,求思路和实现代码!,
我的数据处理方式是,servlet查询数据库,做成二维数组,然后传递给jsp页面,在jsp页面上循环打印,包括<tr></tr>和<td></td>都在循环之中。

两个问题,
1分页
  考虑用循序定一个固定的下标,加判断,翻页就加倍数下标,显示当然还是页面。郁闷的是,这个翻页和上面的对应不起来。

2筛选

  这个基本等于没有办法,我的数据已经由servlet做成二维数组了,如果要在当前页面做筛选效果,那我当期页面需要交互?不会吧。我不知道怎么处理!

3刷新
当前页的刷新如何处理,数据需要重新获取,是前一个servlet传过来的。这个该怎么办了?

菜鸟求救·····高人飞来啊!

[解决办法]
1、分页你最好用SQL分页 这样数据能够稳定
2、我没看懂什么意思(我发现我很菜)
3、想刷新可以用异步刷新 也就是AJAX来做
[解决办法]
select *from (select rownum rown,e.* from emp e) 
where rown>=11 and rownum<=5
SQL分页语句
[解决办法]
查询翻页其实很简单,

第一步:先定义好你要查询的数据源》
1,如果页面上有查询的条件,在写SQL之前要预留参数(你在页面上要查姓名为A的人数据,姓名要作为一个参数组装到SQL中,),分页肯定还需要其他的参数,当前第几页,每页显示几条数据,都要作为参数
通过页面传入servlet再组装到SQL中,(解决数据筛选问题)

第二部: 以什么为载体在页面上呈现,如果有开源框架的话,这个完全可以不用考虑,把你需要的数据直接放在一个map或者list中传到前台就行了。框架有很多处理的标签。为什么要用二维数组呢,找麻烦。就算没有使用到框架,用原生的servert类,也没必要用二维数组吧,自己组装自定义标签,在页面用就OK了,再变态一点,直接在JSP页面上引用JAVA了。关于翻页,你当前页面要保存当前页面的一些数据,比如当前页是第几页,多少条数据,上一页就是 当前页-1 ,下一页就是当前页+1 然后传入后台进行查询(翻页问题)

页面刷新:这个无关紧要吧,这个问题没必要考虑。当你刷新页面的时候,就重新开始分页查询了。如果整体框架没有用到AJAX的话,最好不要考虑用它,
[解决办法]
传到前台应该是List<PageBean>的结构,
PageBean就是含有画面上每行的所有列名。

然后用sql分页,把当前页的开始索引和结束索引值传进sql(比如10行分页,第二页传11, 20)

刷新其实就是再执行检索当前页的数据而已。
[解决办法]
其实你这页面一开始显示的数据就要分页的吧!这样的话!你只有写分页的sql语句了!不然的话!就只有控制循环次数来间接达到分页效果!如假如你有10条记录!你可以让它默认显示5条!也就是循环5次!这种方式是不好的!最好还是改写成分页的sql语句!就好操作了!不关你是要分页,还是要按条件查询、以及刷新!都可以!

[解决办法]

探讨
引用:
查询翻页其实很简单,

第一步:先定义好你要查询的数据源》
1,如果页面上有查询的条件,在写SQL之前要预留参数(你在页面上要查姓名为A的人数据,姓名要作为一个参数组装到SQL中,),分页肯定还需要其他的参数,当前第几页,每页显示几条数据,都要作为参数
通过页面传入servlet再组装到SQL中,(解决数据筛选问题)

第二部: 以……

[解决办法]
JavaBean

package Bean;
//物品类
public class Goods
{
 private int goodsid; // 物品编号
 public String goodsname; // 物品名称
 private float price; // 物品单件

 public void setGoodsid(int goodsid)
 {
this.goodsid = goodsid;
 }
 public int getGoodsid()
 {
return goodsid;
 }
 // 物品名称
 public void setGoodsname(String goodsname)
 {
this.goodsname = goodsname;
 }
 public String getGoodsname()
 {
return goodsname;
 }
 // 物品价格
 public void setPrice(float price)
 {
this.price = price;
 }
 public float getPrice()
 {
return price;
 }
}

单例类

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbConnection {
 private static Connection conn=null;
 private String driver="com.mysql.jdbc.Driver";
 private String url="jdbc:mysql://localhost:3306/mydata";
 private String user="root";
 private String password="1234567";
 
 private DbConnection(){
try {
Class.forName(driver);
conn=DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();


} catch (SQLException e) {
e.printStackTrace();
}
 }
 
 public static Connection getConnection() {
if(conn==null){
new DbConnection();
}
return conn;
 }
}


数据库访问实现

package DAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import Bean.Goods;

import util.DbConnection;

public class Dao {
 private static Connection conn;
 private static ResultSet rs;
 private static Statement stmt;
 private static int pagesize=5;
 static{
conn=DbConnection.getConnection();
 }
 
 //通用的查询方法
 public static ResultSet ExecuteQuery(String sql) {
try {
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
 }
 
 //分页逻辑
 public static ArrayList<Goods> getGoodsList(int currentpageno){
ArrayList<Goods> GoodsList=new ArrayList<Goods>();
int BeginRecord=(currentpageno-1)*pagesize;
int EndRecord=currentpageno*pagesize;
rs=ExecuteQuery("select * from goods limit "+BeginRecord+","+EndRecord);
try {
while(rs.next()){
Goods goods=new Goods();
goods.setGoodsid(rs.getInt(1));
goods.setGoodsname(rs.getString(2));
goods.setPrice(rs.getFloat(3));
GoodsList.add(goods);
}
} catch (SQLException e) {
e.printStackTrace();
}
return GoodsList;
 }
 
 //统计记录数
 public static int getPageCount(){
int total=0;
int PageCount=0;
rs=ExecuteQuery("select count(*) from goods");
try {
if(rs.next()){
total=rs.getInt(1);
PageCount=(total-1)/pagesize+1;
}
} catch (SQLException e) {
e.printStackTrace();
}
return PageCount;
 }
}


servlet控制器

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Bean.Goods;
import DAO.Dao;

public class GetLimiteGoods extends HttpServlet {
 private static final long serialVersionUID = 1L;
 public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
String pageno= request.getParameter("currentpageno");
int currentpageno=1;
if(pageno!=null){
currentpageno=Integer.parseInt(pageno);
}
ArrayList<Goods> GoodsList=Dao.getGoodsList(currentpageno);
request.setAttribute("GoodsList", GoodsList);
request.setAttribute("currentpageno", currentpageno);
request.setAttribute("PageCount", Dao.getPageCount());
request.getRequestDispatcher("/LimiteGoods.jsp").forward(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());


out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
 }
}

 

xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>GetLimiteGoods</servlet-name>
<servlet-class>servlet.GetLimiteGoods</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>GetLimiteGoods</servlet-name>
<url-pattern>/servlet/GetLimiteGoods</url-pattern>
</servlet-mapping>
</web-app>

表现层jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
 </head>
 <body>
 <center>
 <c:if test="${currentpageno>=1}">
<a href="GetLimiteGoods?currentpageno=1">首页</a>
<a href="GetLimiteGoods?currentpageno=${currentpageno-1}">上一页</a>
</c:if>
<c:if test="${currentpageno==1}">
<a href="GetLimiteGoods?currentpageno=${currentpageno+1}">下一页</a>
<a href="GetLimiteGoods?currentpageno=${PageCount}">尾页</a>
</c:if>
<table width="80%" border="1" height="56">
<tr align="center">
<td>
商品编号
</td>
<td>
商品名称
</td>
<td>
商品价格
</td>
</tr>
<c:forEach var="goods" items="${GoodsList}">
<tr align="center">
<td>
${goods.goodsid}
</td>
<td>
${goods.goodsname}
</td>
<td>
${goods.price}
</td>
</tr>
</c:forEach>
</table>
</center>
 </body>
</html>

[解决办法]
慢慢来,别急,一步步来,把你能想到的方法就用上,不行了!我给代码参考!你看行吗?
[解决办法]
分页:

Java code
public class Serch extends ActionSupport{   private  String  bid;   private  String  bname;   private  int    number;   private int k;//储存最大页面数   private int pageNow=1; //页码数,初始为1   private int pageSize = 5 ; //页面行数    private int intRowCount;//总行数   private int intPageCount;//总页数   private int lastPage;   private int p=1;.....set/get;public String execute() throws Exception {    List list=new List();    java.util.List L=new  ArrayList();    L=list.list();    intRowCount=L.size();    System.out.println("链表的长度:"+L.size());    if(L.size()%pageSize==0) //判断分多少页          this.lastPage=L.size()/pageSize;    else        this.lastPage=L.size()/pageSize+1;        this.setIntPageCount(this.lastPage);//存入总页数        if(this.pageNow<1)//如果当前页码是第一页在点第一页的时候也跳转到第一页        this.pageNow=1;    if(this.pageNow>this.lastPage)//同理只不过是最后一页        this.pageNow=this.lastPage;    /*     *      * 假设取其中20-25条     *      *      *      */  int startIndex=(this.pageNow-1)*pageSize;//截止条目开始,第20条  int endIndex=startIndex+pageSize;//截止条目结束     第25条    if(endIndex>=L.size())      endIndex=L.size();   L= L.subList(startIndex, endIndex);  System.out.println("执行");      ActionContext.getContext().put("list", L);    return  "success";}@Overridepublic void validate() {    // TODO Auto-generated method stub    super.validate();}}前台显示:共<s:property value="intRowCount"/>记录&nbsp;&nbsp;共<s:property value="intPageCount"/>页&nbsp;&nbsp;        第<s:property value="pageNow"/>页&nbsp;&nbsp; <s:url action="Serch.action" id="url">                <s:param name="pageNow">                    <s:property value="1" />                </s:param>            </s:url>  <s:a href="%{url}">首页</s:a>    &nbsp;&nbsp;              <s:url action="Serch.action" id="url">                <s:param name="pageNow">                    <s:property value="%{pageNow-1}" />                </s:param>            </s:url>  <s:a href="%{url}">上一页</s:a>    &nbsp;&nbsp; <s:url action="Serch.action" id="url">                <s:param name="pageNow">                    <s:property value="%{pageNow+1}" />                </s:param>            </s:url>  <s:a href="%{url}">下一页</s:a>    &nbsp;&nbsp;<s:url action="Serch.action" id="url">                <s:param name="pageNow">                    <s:property value="lastPage" />                </s:param>            </s:url>  <s:a href="%{url}">尾页</s:a> 


[解决办法]

探讨
1分页
2筛选
3刷新

热点排行