JFinal Web开发学习(十)前后台显示博客列表

2024-08-24 02:18

本文主要是介绍JFinal Web开发学习(十)前后台显示博客列表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码:
https://code.csdn.net/u012995856/jfinaltest/tree/master

效果:

前台:使用jfinal自带分页,样式没有使用layui的分页,比较原生
这里写图片描述
这里写图片描述

后台:没有使用jfinal分页,使用list列表以及hui-admin自带的分页
这里写图片描述

1.写控制器
BlogController修改index方法,前台显示博客列表

    //访问URL:/blog/public void index(){setAttr("blogPage", Blog.dao.paginate(getParaToInt(0, 1), 5));}

AdminController添加后台显示博客列表方法

    //后台显示文章public void articles(){setAttr("bloglist", Blog.dao.getAll());render("article-list.html");}

2.写视图html模板

前台模板,对应BlogController
JFinal官方提供的分页
WebRoot/common/_paginate.html

<#macro paginate currentPage totalPage actionUrl urlParas=""><#if (totalPage <= 0) || (currentPage > totalPage)><#return></#if><#local startPage = currentPage - 4><#if (startPage < 1)><#local startPage = 1></#if><#local endPage = currentPage + 4><#if (endPage > totalPage)><#local endPage = totalPage></#if><div class="pagination"><#if (currentPage <= 8)><#local startPage = 1></#if><#if ((totalPage - currentPage) < 8)><#local endPage = totalPage></#if><#if (currentPage == 1)><span class="disabled prev_page">上页</span><#else><a href="${actionUrl}#{currentPage - 1}${urlParas!}" class="prev_page">上页</a></#if><#if (currentPage > 8)><a href="${actionUrl}#{1}${urlParas!}">#{1}</a><a href="${actionUrl}#{2}${urlParas!}">#{2}</a><span class="gap">…</span></#if><#list startPage..endPage as i><#if currentPage == i><span class="current">#{i}</span><#else><a href="${actionUrl}#{i}${urlParas!}">#{i}</a></#if></#list><#if ((totalPage - currentPage) >= 8)><span class="gap">…</span><a href="${actionUrl}#{totalPage - 1}${urlParas!}">#{totalPage - 1}</a><a href="${actionUrl}#{totalPage}${urlParas!}">#{totalPage}</a></#if><#if (currentPage == totalPage)><span class="disabled next_page">下页</span><#else><a href="${actionUrl}#{currentPage + 1}${urlParas!}" class="next_page" rel="next">下页</a></#if></div>
</#macro>

WebRoot/blog/index.html
博客前台显示列表的模板

<!doctype html>
<html>
<head><meta charset="utf-8"><title>博客_列表</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><link rel="stylesheet" href="/static/layui/css/layui.css"  media="all">
</head>
<body><ul class="layui-nav"><li class="layui-nav-item"><a href="">Logo</a></li><li class="layui-nav-item "><a href="">首页</a></li><li class="layui-nav-item layui-this"><a href="">博客</a></li><li class="layui-nav-item"><a href="">关于我们</a></li>
</ul><fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;"><legend>BLOG</legend>
</fieldset><br>
<div class="layui-main">
<table class="layui-table"><colgroup><col width="150"><col width="200"><col><col></colgroup><thead><tr><th>标题</th><th>更新时间</th><th>作者</th><th>发布时间</th></tr> </thead><tbody>
<#list blogPage.getList() as x><tr><td>${x.title}</td><td>${x.update_date}</td><td>${x.author}</td><td>${x.create_date}</td></tr></#list></tbody>
</table><#include "/common/_paginate.html" /><@paginate currentPage=blogPage.pageNumber totalPage=blogPage.totalPage actionUrl="/blog/" />
</div><script src="/static/layui/layui.js"></script><script>
//配置自己的js加载路径
layui.config({base:'/static/js/modules/'}).use('index');</script></body>
</html>

后台模板
修改加载显示模板列表页面的url
WebRoot/admin/index.html

<li><a _href="articles" data-title="文章管理" href="javascript:void(0)">文章管理</a></li>

WebRoot/admin/article-list.html

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<!--[if lt IE 9]>
<script type="text/javascript" src="lib/html5.js"></script>
<script type="text/javascript" src="lib/respond.min.js"></script>
<script type="text/javascript" src="lib/PIE_IE678.js"></script>
<![endif]-->
<link rel="stylesheet" type="text/css" href="static/h-ui/css/H-ui.min.css" />
<link rel="stylesheet" type="text/css" href="static/h-ui.admin/css/H-ui.admin.css" />
<link rel="stylesheet" type="text/css" href="lib/Hui-iconfont/1.0.7/iconfont.css" />
<link rel="stylesheet" type="text/css" href="lib/icheck/icheck.css" />
<link rel="stylesheet" type="text/css" href="static/h-ui.admin/skin/default/skin.css" id="skin" />
<link rel="stylesheet" type="text/css" href="static/h-ui.admin/css/style.css" />
<!--[if IE 6]>
<script type="text/javascript" src="http://lib.h-ui.net/DD_belatedPNG_0.0.8a-min.js" ></script>
<script>DD_belatedPNG.fix('*');</script>
<![endif]-->
<title>资讯列表</title>
</head>
<body>
<nav class="breadcrumb"><i class="Hui-iconfont">&#xe67f;</i> 首页 <span class="c-gray en">&gt;</span> 资讯管理 <span class="c-gray en">&gt;</span> 资讯列表 <a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a></nav>
<div class="page-container"><div class="text-c"> <span class="select-box inline"><select name="" class="select"><option value="0">全部分类</option><option value="1">分类一</option><option value="2">分类二</option></select></span> 日期范围:<input type="text" onfocus="WdatePicker({maxDate:'#F{$dp.$D(\'logmax\')||\'%y-%M-%d\'}'})" id="logmin" class="input-text Wdate" style="width:120px;">-<input type="text" onfocus="WdatePicker({minDate:'#F{$dp.$D(\'logmin\')}',maxDate:'%y-%M-%d'})" id="logmax" class="input-text Wdate" style="width:120px;"><input type="text" name="" id="" placeholder=" 资讯名称" style="width:250px" class="input-text"><button name="" id="" class="btn btn-success" type="submit"><i class="Hui-iconfont">&#xe665;</i> 搜资讯</button></div><div class="cl pd-5 bg-1 bk-gray mt-20"> <span class="l"><a href="javascript:;" onclick="datadel()" class="btn btn-danger radius"><i class="Hui-iconfont">&#xe6e2;</i> 批量删除</a> <a class="btn btn-primary radius" data-title="添加资讯" _href="article-add.html" onclick="Hui_admin_tab(this)" href="javascript:;"><i class="Hui-iconfont">&#xe600;</i> 添加资讯</a></span> <span class="r">共有数据:<strong>54</strong></span> </div><div class="mt-20"><table class="table table-border table-bordered table-bg table-hover table-sort"><thead><tr class="text-c"><th width="25"><input type="checkbox" name="" value=""></th><th width="80">ID</th><th>标题</th><th width="80">分类</th><th width="80">作者</th><th width="120">发布时间</th><th width="75">更新时间</th><th width="60">发布状态</th><th width="120">操作</th></tr></thead><tbody><#list bloglist as x><tr class="text-c"><td><input type="checkbox" value="" name=""></td><td>${x.id}</td><td class="text-l"><u style="cursor:pointer" class="text-primary" onClick="article_edit('查看','article-zhang.html','10001')" title="查看">${x.title}</u></td><td>行业动态</td><td>${x.author}</td><td>${x.create_date}</td><td>${x.update_date}</td><td class="td-status"><span class="label label-success radius">已发布</span></td><td class="f-14 td-manage"><a style="text-decoration:none" onClick="article_stop(this,'10001')" href="javascript:;" title="下架"><i class="Hui-iconfont">&#xe6de;</i></a> <a style="text-decoration:none" class="ml-5" onClick="article_edit('资讯编辑','article-add.html','10001')" href="javascript:;" title="编辑"><i class="Hui-iconfont">&#xe6df;</i></a> <a style="text-decoration:none" class="ml-5" onClick="article_del(this,'10001')" href="javascript:;" title="删除"><i class="Hui-iconfont">&#xe6e2;</i></a></td></tr></#list></tbody></table></div>
</div>
<script type="text/javascript" src="lib/jquery/1.9.1/jquery.min.js"></script> 
<script type="text/javascript" src="lib/layer/2.1/layer.js"></script> 
<script type="text/javascript" src="lib/My97DatePicker/WdatePicker.js"></script> 
<script type="text/javascript" src="lib/datatables/1.10.0/jquery.dataTables.min.js"></script> 
<script type="text/javascript" src="static/h-ui/js/H-ui.js"></script> 
<script type="text/javascript" src="static/h-ui.admin/js/H-ui.admin.js"></script>
<script type="text/javascript">
$('.table-sort').dataTable({"aaSorting": [[ 1, "desc" ]],//默认第几个排序"bStateSave": true,//状态保存"aoColumnDefs": [//{"bVisible": false, "aTargets": [ 3 ]} //控制列的隐藏显示{"orderable":false,"aTargets":[0,8]}// 不参与排序的列]
});/*资讯-添加*/
function article_add(title,url,w,h){var index = layer.open({type: 2,title: title,content: url});layer.full(index);
}
/*资讯-编辑*/
function article_edit(title,url,id,w,h){var index = layer.open({type: 2,title: title,content: url});layer.full(index);
}
/*资讯-删除*/
function article_del(obj,id){layer.confirm('确认要删除吗?',function(index){$(obj).parents("tr").remove();layer.msg('已删除!',1);});
}
/*资讯-审核*/
function article_shenhe(obj,id){layer.confirm('审核文章?', {btn: ['通过','不通过','取消'], shade: false,closeBtn: 0},function(){$(obj).parents("tr").find(".td-manage").prepend('<a class="c-primary" onClick="article_start(this,id)" href="javascript:;" title="申请上线">申请上线</a>');$(obj).parents("tr").find(".td-status").html('<span class="label label-success radius">已发布</span>');$(obj).remove();layer.msg('已发布', {icon:6,time:1000});},function(){$(obj).parents("tr").find(".td-manage").prepend('<a class="c-primary" onClick="article_shenqing(this,id)" href="javascript:;" title="申请上线">申请上线</a>');$(obj).parents("tr").find(".td-status").html('<span class="label label-danger radius">未通过</span>');$(obj).remove();layer.msg('未通过', {icon:5,time:1000});}); 
}
/*资讯-下架*/
function article_stop(obj,id){layer.confirm('确认要下架吗?',function(index){$(obj).parents("tr").find(".td-manage").prepend('<a style="text-decoration:none" onClick="article_start(this,id)" href="javascript:;" title="发布"><i class="Hui-iconfont">&#xe603;</i></a>');$(obj).parents("tr").find(".td-status").html('<span class="label label-defaunt radius">已下架</span>');$(obj).remove();layer.msg('已下架!',{icon: 5,time:1000});});
}/*资讯-发布*/
function article_start(obj,id){layer.confirm('确认要发布吗?',function(index){$(obj).parents("tr").find(".td-manage").prepend('<a style="text-decoration:none" onClick="article_stop(this,id)" href="javascript:;" title="下架"><i class="Hui-iconfont">&#xe6de;</i></a>');$(obj).parents("tr").find(".td-status").html('<span class="label label-success radius">已发布</span>');$(obj).remove();layer.msg('已发布!',{icon: 6,time:1000});});
}
/*资讯-申请上线*/
function article_shenqing(obj,id){$(obj).parents("tr").find(".td-status").html('<span class="label label-default radius">待审核</span>');$(obj).parents("tr").find(".td-manage").html("");layer.msg('已提交申请,耐心等待审核!', {icon: 1,time:2000});
}</script> 
</body>
</html>

其中有好多暂时未使用到的代码

3.简单测试

前台博客列表URL
http://localhost/blog/

后台博客列表:
http://localhost/admin/index
博客管理->文章管理

这篇关于JFinal Web开发学习(十)前后台显示博客列表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101161

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表