问题动态展示和翻页
①.通过ajax向getpageServlet传两个参数currentPage和type(question/answer,代表问题页或题解页)。
②. 在getpageServlet中向Page实体类中封装currentPage,调用service中getAnsPage方法,再调用Dao层中的getAnsPage方法返回封装完成的Page(内涵当前页的具体问题,问题的qid,title)
③.ajax的返回函数代码为
success:function(dataJson){
//显示部分
var $tbody = $(".questionContent");
$tbody.empty();
var queList = dataJson.queList;
var question = "question";
for(i=0;i<queList.length;i++)
{
var $tr = $("<tr></tr>");
$tr.html(
"<td></td>"+
"<td><span style='color: grey;'>"+queList[i].qid+"</span></td>"+
"<td><a href='getquestionByid?qid="+queList[i].qid+"&uid=0&type="+question+"'>"+queList[i].questionTitle+"</a></td>"+
"<td><span style='color: grey;'>简单</span></td>"+
"<td><span class='label label-success round'>100%</span></td>"
);
$tbody.append($tr);
}
//翻页部分
var maxPage = dataJson.pageNum;
var $li = $(".flag");
for(var i=maxPage;i>0;i--)
{
var $myli = $("<li class='#' id='"+i+"'></li>");
$myli.html(
"<a href = '#'>"+i+"</a>"
);
$myli.click(function(){
changePage( $(this).text() );
});
$li.after($myli);
}
$("#1").attr("class","active");
$("#page_sta").click(function(){
changePage( 1 );
});
$("#page_end").click(function(){
changePage( maxPage );
});
}
④. Dao层具体实现为
public Page getPage(Page page) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConnection();
String sql = "select * from questionbank limit ?,?";
ps = conn.prepareStatement(sql);
int firstParam = (page.getCurPage()-1)*page.getQueNum();
ps.setInt(1, firstParam);
ps.setInt(2, page.getQueNum());
rs = ps.executeQuery();
while(rs.next()) {
//填充当前页展示的具体问题
Code code = new Code();
code.setQid(rs.getInt(1));
code.setQuestionTitle(rs.getString(2));
code.setQuestionDescription(rs.getString(3));
code.setInputFormat(rs.getString(4));
code.setOutputFormat(rs.getString(5));
code.setInputSample(rs.getString(6));
code.setOutputSample(rs.getString(7));
List<Code> codeList = page.getQueList();
codeList.add(code);
}
//codes中题解的总数
sql = "select count(1) from codes";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
rs.next();
int totalNum = rs.getInt(1);
int pageNum = 1;
if(totalNum<page.getQueNum()) {
pageNum = 1;
}else if(totalNum%page.getQueNum()==0) {
pageNum = totalNum/page.getQueNum();
}else if(totalNum%page.getQueNum()!=0) {
pageNum = totalNum/page.getQueNum()+1;
}
page.setPageNum(pageNum);
return page;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
JDBCUtil.closeConnection(rs,ps, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return page;
}
⑤.翻页函数
function changePage(num)
{
var question = "question";
$.ajax({
url:"getPage?currentPage="+num+"&type="+question,
type:"post",
data:{
},
dataType:"json",
success:function(dataJson){
var $tbody = $(".questionContent");
$tbody.empty();
var queList = dataJson.queList;
var question = "question";
for(i=0;i<queList.length;i++)
{
var $tr = $("<tr></tr>");
$tr.html(
"<td></td>"+
"<td><span style='color: grey;'>"+queList[i].qid+"</span></td>"+
"<td><a href='getquestionByid?qid="+queList[i].qid+"&uid=0&type="+question+"'>"+queList[i].questionTitle+"</a></td>"+
"<td><span style='color: grey;'>简单</span></td>"+
"<td><span class='label label-success round'>100%</span></td>"
);
$tbody.append($tr);
}
//当前是那一页
for(var j=1;j<=dataJson.pageNum;j++)
{
$("#"+j+"").attr("class","#");
}
$("#"+num+"").attr("class","active");
}
});
}
$("#searchbutton").click(function(){
$.ajax({
url:"searchServlet?curpage="+1,
type:"post",
data:{
"searchContent":$("#search_content").val()
},
dataType:"json",
success:function(dataJson)
{
var $tbody = $(".questionContent");
$tbody.empty();
var queList = dataJson.queList;
var question = "question";
for(i=0;i<queList.length;i++)
{
var $tr = $("<tr></tr>");
$tr.html(
"<td></td>"+
"<td><span style='color: grey;'>"+queList[i].qid+"</span></td>"+
"<td><a href='getquestionByid?qid="+queList[i].qid+"&type="+question+"'>"+queList[i].questionTitle+"</a></td>"+
"<td><span style='color: grey;'>简单</span></td>"+
"<td><span class='label label-success round'>100%</span></td>"
);
$tbody.append($tr);
}
var lastmaxpage = ${
maxpage};
for(var i=1;i<=lastmaxpage;i++)
{
$("#"+i+"").remove();
}
var $li = $(".flag");
var $myli = $("<li class='#' id='1'></li>");
$myli.html(
"<a href = '#'>1</a>"
);
$li.after($myli);
$("#1").attr("class","active");
}
});
});
});
②.Dao层实现
public Page searchQueDao(String SearchContent,Page page) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConnection();
//模糊匹配
String sql = "select * from questionbank where questionTitle like '%"+SearchContent+"%';";
ps = conn.prepareStatement(sql);
//ps.setString(1, SearchContent);
rs = ps.executeQuery();
for(int first = 1;rs.next();first++)
{
Code code = new Code();
code.setQid(rs.getInt(1));
code.setQuestionTitle(rs.getString(2));
code.setQuestionDescription(rs.getString(3));
code.setInputFormat(rs.getString(4));
code.setOutputFormat(rs.getString(5));
code.setInputSample(rs.getString(6));
code.setOutputSample(rs.getString(7));
List<Code> codeList = page.getQueList();
codeList.add(code);
page.setQueNum(first);
}
int pagenum = 1;
page.setPageNum(pagenum);
return page;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
JDBCUtil.closeConnection(rs,ps, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return page;
}
通过超链接
"<td><a href='getquestionByid?qid="+queList[i].qid+"&type="+question+"'>"+queList[i].questionTitle+"</a></td>"
将参数qid,(uid),type传到getquestionByidservlet–type用来区分是题目页面还是题解页面。
getquestionByidservlet代码:
@WebServlet("/getquestionByid")
public class getQuestionByidServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String qid = request.getParameter("qid");
String type = request.getParameter("type");
Code code = new Code();
code.setQid(Integer.valueOf(qid));
if("question".equals(type))
{
GetQuestionByidService gs = new GetQuestionByidServiceImpl();
code = gs.getQuestionByidService(code);
request.setAttribute("qid", code.getQid());
request.setAttribute("tit", code.getQuestionTitle());
request.setAttribute("des", code.getQuestionDescription());
request.setAttribute("format_in", code.getInputFormat());
request.setAttribute("format_out", code.getOutputFormat());
request.setAttribute("example_in", code.getInputSample());
request.setAttribute("example_out", code.getOutputSample());
request.getRequestDispatcher("questionEditor.jsp").forward(request, response);
}
if("answer".equals(type))
{
List<Code> codes = new ArrayList<Code>();
String uidStr = request.getParameter("uid");
code.setUid(Integer.valueOf(uidStr));
GetQuestionByidService gs = new GetQuestionByidServiceImpl();
codes = gs.getQuestionByidAnsService(code);
request.setAttribute("qid", codes.get(1).getQid());
request.setAttribute("tit", codes.get(1).getQuestionTitle());
request.setAttribute("des", codes.get(1).getQuestionDescription());
request.setAttribute("code", codes.get(1).getCode());
request.setAttribute("author",codes.get(1).getUsername());
request.setAttribute("pertit", codes.get(0).getQuestionTitle());
request.setAttribute("perqid", codes.get(0).getQid());
request.setAttribute("peruid", codes.get(0).getUid());
request.setAttribute("nexttit", codes.get(2).getQuestionTitle());
request.setAttribute("nextqid", codes.get(2).getQid());
request.setAttribute("nextuid", codes.get(2).getUid());
request.getRequestDispatcher("questionAns.jsp").forward(request, response);
}
}
文章浏览阅读589次。用户体验一直是前端开发需要考虑的重要部分,在数据请求时常见到锁屏的loading动画,而现在越来越多的产品倾向于使用Skeleton Screen Loading(骨架屏)替代,以优化用户体验。_首页预加载骨架
文章浏览阅读562次。Key Terms版本控制系统(VCS)或源代码管理器(SCM):一个VCS允许您:将文件恢复到以前的状态,将整个项目恢复到以前的状态,回顾随时间变化的变化,看谁最后修改了可能引起的事情。一个问题,谁提出了一个问题,什么时候,等等。Version Control System (VCS) or Source Code Manager ..._git常用术语
文章浏览阅读2.4k次。* 通过 NTSTATUS 获得相应的字符串 使用函数RtlNtStatusToDosError可以获得与NTSTATUS相对应的Windows错误码。 微软网站上说用API函数 FormatMessage 可获得相应的字符串,但是在调用前必须先用 LoadLibrary 载入 "NTDLL.DLL"。 文章链接 - http://support.microsoft.___imp_rtlntstatustodoserror
文章浏览阅读337次。致敬郭霖,这些知识是从第一行代码第二版中直接码下来的,谢谢他,注意每个条目前是否有.1..gradle和.idea这两个目录下放置的都是Android Studio自动生成的一些文件,我们无需关心,也不要去手动改动他们2.app项目中的代码,资源等内容几乎全部都放置在这个目录下3.build这个目录也不要过多关心,它主要包含了一些在编译时自动生成的文件4.gradl..._androidstudio怎么project模式
文章浏览阅读3.9k次。if (i === len - 1)<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8"><title>menu</title><style type="text/css"></style><script typ..._each 怎么判断是最后一个
文章浏览阅读3.1w次,点赞19次,收藏79次。一、 创建test分支提交步骤1.列出所有分支# git branch -a2.创建test分支 # git branch test3.切换到test分支: # git checkout test4.添加add修改:# git add .5.添加commit注释# git commit -m "第一次提交代码"6.提..._创建名为test的本地分支
文章浏览阅读9.8k次,点赞10次,收藏35次。Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。算法实现原理图解:a.首先是有两个字符串,这里写一个简单的 abc 和 abeb.将..._java中文字符串相似度算法
文章浏览阅读1k次。text-align 水平对齐 right left centervertical-align 垂直对齐 top middle bottom属性:AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐。 AbsMiddle 图像的中间与同一行中最大元素的中间对齐。 Baseline 图像的下边缘与第一行文本的下边缘对齐。 Bottom 图_css 标题和第一行对齐
文章浏览阅读4.5k次,点赞2次,收藏5次。github在统计提交的时候,会判断邮箱是否跟github的登陆邮箱匹配,不匹配则不计算活跃度,即不生成小绿块。查看配置git config user.emailgit config user.name设置当前仓库的user.name/user.emailgit config user.email yourEmailNamegit config user.name yourName设置全局user.name/user.emailgit config --global use._user.name
文章浏览阅读904次。目录操作命令名功能描述使用举例mkdir创建一个目录mkdir dirnamermdir删除一个目录rmdir dirnamemvdir移动或重命名一个目录mvdir dir1 dir2cd改变当前目录cd dirnamepwd显示当前目录的路径名pwdls显示当前目录的内容ls -ladircmp比较两个目录的内容dircmp dir1 dir2文件操作命令名功能描述使用举例cat显示或连接文件..._mac yard
文章浏览阅读355次。su切换用户有两种方式:1.su username2.su - username#su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。用echo $PATH命令看一下su和su -以后的环境变量有_linux的su -和su的区别
文章浏览阅读1k次。 聚合转换功能类似于sql语句中的聚合函数。它应用列值,并将结果作为新列复制到转换输出中。聚合转换支持下列运算功能运算说明Group by将数据集划分为组。任何数据类型的列都可用于分组。Sum对列中的值求和。只能对数值数据类型的列求和。Average返回列中值的平均值。只能对数值数据类型的列求平均值。Co..._ssis847