th:href="'/post/'+${post.id}"
时间: 2024-06-07 11:11:40 浏览: 4
这是一个 Thymeleaf 模板引擎的表达式,用于生成一个链接,其中 `${post.id}` 是一个变量,表示该链接所对应的文章的 ID。生成的链接类似于 `/post/123`,其中 `123` 是实际的文章 ID。在该链接被点击时,可以通过后端程序解析出文章 ID 并根据 ID 查询相应的文章内容。
相关问题
为什么<!DOCTYPE html> <html xmIns:th= "http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>User Form</title> </head> <body> <h1>User Form</h1> <form th:object="$[user]"th:action="@[/users/save]" method="post"> <input type"hidden" th:field="*(id)"> <label> Name:</label><input type="text" th:f¡eld="* [name]"> <br> <label>Email:</label><input type="email" th:field="* [email]"> <br> <input type="submit" value="Save"> </form> <p><a href="/users">Back to User List</a></p></body> </html>
这段代码是一个HTML页面,使用了Thymeleaf模板引擎进行渲染。Thymeleaf是一种服务器端Java模板引擎,可以将HTML模板和数据合并生成HTML页面。在这个页面中,使用了Thymeleaf的语法来绑定表单数据和后端代码。具体来说,th:object="$[user]"绑定了表单提交的数据对象为user,th:action="@[/users/save]"指定了提交表单时所调用的后端代码的URL为/users/save,th:field="*(id)"和th:field="* [name]"分别绑定了表单中的id和name字段。
给下面代码增加分页功能,要求细致,逻辑清楚,<form action="./../selectNews" method="post"> <input type="text" name="key" id="key" placeholder="请输入标题"/> <input type="submit" value="查询"/> <a href="zhuce.jsp">发布新闻</a> <a href="../user01/index.jsp">返回主页</a> </form> <table> <thead> <tr> <th>新闻编号</th> <th>新闻标题</th> <%-- <th>新闻内容</th>--%> <th>新闻类别</th> <th>发布人</th> <th>发布时间</th> <th>状态</th> <th>是否头条</th> <th colspan="4" align="center">操作</th> </tr> </thead> <tbody> <c:forEach items="${newslist}" var="u"> <tr> <td>${u.nid}</td> <td>${u.title}</td> <%-- <td>${u.content}</td>--%> <td>${u.type}</td> <td>${u.userName}</td> <td>${u.pubTime}</td> <td> <c:choose> <c:when test="${u.state==0}"><span style="color: ghostwhite">未审核</span></c:when> <c:when test="${u.state==1}"><span style="color: green">审核通过</span></c:when> <c:otherwise><span style="color: red">未通过</span></c:otherwise> </c:choose> </td> <td> <c:choose> <c:when test="${u.top==0}">否</c:when> <c:otherwise>是</c:otherwise> </c:choose> </td> <c:choose> <c:when test="${user.rule==1}"> <td> <a href="../NewsDetailServlet?nid=${u.nid}&op=show">查看</a> </td> <td> <a href="../NewsDetailServlet?nid=${u.nid}&op=update">修改</a> </td> <td> <a href="NewsDelete.jsp?nid=${u.nid}&title=${u.title}&userName=${user.userName}">删除</a> </td> <td> <a href="Newsshenhe.jsp?nid=${u.nid}&title=${u.title}&userName=${user.userName}">审核</a> </td> </c:when> <c:when test="${user.rule==0 && user.uid==u.uid}"> <td><a href="../NewsDetailServlet?nid=${u.nid}&op=show">查看</a></td> <td><a href="../NewsDetailServlet?nid=${u.nid}&op=update">修改</a></td> <td><a href="NewsDelete.jsp?nid=${u.nid}&title=${u.title}&userName=${user.userName}">删除</a></td> </c:when> <c:otherwise> <td><a href="../NewsDetailServlet?nid=${u.nid}&op=show">查看</a></td> </c:otherwise> </c:choose> </tr> </c:forEach> </table>
首先,我们需要在表单中添加一个分页控件,例如:
<form action="./../selectNews" method="post">
<input type="text" name="key" id="key" placeholder="请输入标题"/>
<input type="submit" value="查询"/>
<a href="zhuce.jsp">发布新闻</a>
<a href="../user01/index.jsp">返回主页</a>
<!-- 分页控件 -->
<div class="pagination">
<c:if test="${currentPage > 1}">
<a href="./../selectNews?page=${currentPage - 1}&key=${param.key}">上一页</a>
</c:if>
<c:forEach begin="${minPage}" end="${maxPage}" var="i">
<c:choose>
<c:when test="${i == currentPage}">
<span class="current">${i}</span>
</c:when>
<c:otherwise>
<a href="./../selectNews?page=${i}&key=${param.key}">${i}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${currentPage < totalPages}">
<a href="./../selectNews?page=${currentPage + 1}&key=${param.key}">下一页</a>
</c:if>
</div>
</form>
我们使用了一个名为 "pagination" 的 div 元素来包含分页控件。其中,currentPage 表示当前页数,totalPages 表示总页数,minPage 和 maxPage 分别表示当前页数左边和右边的页数范围。
在 Java Servlet 中,我们需要对请求参数进行解析,计算出分页所需的各个参数,并将它们传递给 JSP 页面。例如:
int page = Integer.parseInt(request.getParameter("page"));
int pageSize = 10; // 每页显示的记录数
int start = (page - 1) * pageSize; // 计算起始记录数
String key = request.getParameter("key");
List<News> newslist = NewsDAO.selectNews(start, pageSize, key);
int totalCount = NewsDAO.getNewsCount(key);
int totalPages = (int) Math.ceil(totalCount * 1.0 / pageSize);
int minPage = Math.max(1, page - 5);
int maxPage = Math.min(totalPages, page + 5);
request.setAttribute("newslist", newslist);
request.setAttribute("currentPage", page);
request.setAttribute("totalPages", totalPages);
request.setAttribute("minPage", minPage);
request.setAttribute("maxPage", maxPage);
request.getRequestDispatcher("newslist.jsp").forward(request, response);
在 JSP 页面中,我们需要根据传递过来的参数来生成分页控件。我们可以使用 JSTL 标签库中的 forEach 标签来循环生成分页链接。例如:
<c:if test="${currentPage > 1}">
<a href="./../selectNews?page=${currentPage - 1}&key=${param.key}">上一页</a>
</c:if>
<c:forEach begin="${minPage}" end="${maxPage}" var="i">
<c:choose>
<c:when test="${i == currentPage}">
<span class="current">${i}</span>
</c:when>
<c:otherwise>
<a href="./../selectNews?page=${i}&key=${param.key}">${i}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${currentPage < totalPages}">
<a href="./../selectNews?page=${currentPage + 1}&key=${param.key}">下一页</a>
</c:if>
注意,我们在分页链接中传递了当前页数和查询关键字两个参数,这样在用户点击分页链接时就可以保持查询关键字不变,同时跳转到相应的页数。
最后,我们需要在查询语句中添加 LIMIT 子句来限制返回的记录数。例如:
SELECT * FROM news WHERE title LIKE '%${key}%' LIMIT ${start}, ${pageSize};
其中,${start} 和 ${pageSize} 分别表示起始记录数和每页显示的记录数。这样就可以实现分页功能了。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>产品</title> <style> </style> <script src="./js/jquery-3.1.1.min.js"></script> <script> $().ready(function(){ $("#search").click(function(){ $.ajax({ url:"http://43.136.217.18:8081/getProduct", data:{name:$("#product").val()}, type:"POST", dataType:"JSON", success:function(jsonData){ //将json对象转成字符串打印出来(对应二.1让我们把从服务端返回的json数据粘贴到下方) //document.write(JSON.stringify(jsonData)); //返回数据后,即粘贴完毕后注释掉即可 var html = "";//表头 html +=   品牌 型号 价格 ; for(var i in jsonData.data){//每循环一次就是一行,则每循环一次,html都要加一个 var item = jsonData.data[i]; html += " "; html += "![]()
";//第一列 html += "" + item.brand + " "; html += "" + item.model + " "; html += "" + item.price + " "; html += " "; } html += "";//表尾 $("div:last-child").html(html);//渲染 } }); }); }); </script> </head> <body> <input type="text" id="product" placeholder="请输入产品名称"> <input type="button" id="search" value="搜索"> </body> </html>
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
<body> <form action="QueryServlet" method="post"> 请输入用户名:<input type="text" name="userName"/> <input type="submit" value="查询"/> 显示全部 </form> 用户名 密码 积分 注册时间 <c:forEach items="${users }" var="item"> ${item.userName } ${item.password } ${item.integral } ${item.registerTime } 删除 </c:forEach> </body>tomcat 删除一条记录怎么写
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
{% extends "admin/base.html" %} {% block content %} 药品列表 ID 药品名称 操作 {% for drug in drugs %} {{ drug.id }} {{ drug.drug_name }} 编辑 <form action="{% url 'admin:drug_db_drug_list_delete' drug.id %}" method="post" class="d-inline"> {% csrf_token %} <button class="btn btn-danger btn-sm">删除</button> </form> {% empty %} 暂无药品 {% endfor %} 添加新药品 药品相互作用 ID 药品1 药品2 相互作用 操作 {% for interaction in interactions %} {{ interaction.id }} {{ interaction.drug1 }} {{ interaction.drug2 }} {{ interaction.interaction }} 编辑 <form action="{% url 'admin:drug_db_drug_interaction_delete' interaction.id %}" method="post" class="d-inline"> {% csrf_token %} <button class="btn btn-danger btn-sm">删除</button> </form> {% empty %} 暂无药品相互作用 {% endfor %} 添加新药品相互作用 {% endblock %} 为上述代码设置相应的视图和URL配置,并将这些视图和操作注册到Django admin页面中。
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)