用Map储存图书分类信息,那在jsp中用jstl显示的这一段怎么写啊,有点迷惑

用Map储存图书分类信息,那在jsp中用jstl显示的这一段怎么写啊,有点迷惑

正在回答

登陆购买课程后可参与讨论,去登陆

8回答

同学你好!

1.再检查一下页面的编码

http://img1.sycdn.imooc.com//climg/5cf4c9120001348310140295.jpg

祝学习愉快~

  • KelvinChung 提问者 #1
    老师我贴上去我的代码了,请您看看~
    2019-06-03 16:15:30
提问者 KelvinChung 2019-06-03 16:14:54
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
      <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>图书添加</title>
</head>
<body>
	<center>
		<h1>图书添加</h1>
		<form action="BiggerProject/AddBookServlet" method="post">
			<table width="400px" cellspacing="0px" cellpadding="0px" border="1px">
				<tr>
					<td>图书ID</td>
					<td><input type="text" name="id" placeholder="请输入数字" pattern="\d+" required="required"></td>
				</tr>
				<tr>
					<td>图书名</td>
					<td><input type="text" name="bookName"></td>
				</tr>
				<tr>
					<td>图书分类</td>
					<td>
						<select name="catgoryName">
							<c:forEach items = "${applicationScope.category}" var = "map">
								<option value="${map.ID}">${map.CategoryName}</option>
							</c:forEach>
						</select> 
					</td>
				</tr>
				<tr>
					<td>价格</td>
					<td><input type="text" name="price" placeholder="请输入价格" ></td>
				</tr>
				<tr>
					<td>描述</td>
					<td><input type="text" name="description" placeholder="请输入描述信息"></td>
				</tr>
				<tr>
					<td colspan="2" style="text-align:center">
						<input type="submit" value="添加">
						<input type="reset" value="重置">
					</td>
				</tr>
			</table>
		</form>
	</center>
</body>
<script type="text/javascript" src = "js/jquery-3.4.1.js"></script>
<script type="text/javascript">
	






</script>




</html>
package com.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;

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

import com.alibaba.fastjson.JSON;
import com.main.LibDaoImpl;

/**
 * Servlet implementation class CatgoryServlet
 */
@WebServlet("/CatgoryServlet")
public class CatgoryServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CatgoryServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		Long idd = Long.parseLong(id);
		String category = request.getParameter("catgoryName");
		String disc = request.getParameter("description");
		
		LibDaoImpl ldd = new LibDaoImpl();
		
		ldd.addBookCatgory(idd, category, disc);
		List<HashMap<String, Object>> mapp = ldd.getAllBookCatgory();
		request.getServletContext().setAttribute("category", mapp);
		//String json = JSON.toJSONString(mapp);
		//response.setContentType("text/html;charset=utf-8");
		//response.getWriter().println(json);
		//response.sendRedirect(request.getContextPath()+"/addBook.jsp");
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		request.getRequestDispatcher("/addBook.jsp").forward(request,response);
		System.out.println(1);
	}

}


  • 同学你好!建议同学打断点测试一下,是在哪一步出现的乱码呢,可能出现的地方:1.添加分类时,2.列表显示时。针对性的解决呢。祝学习愉快~
    2019-06-03 16:47:59
提问者 KelvinChung 2019-06-03 14:57:59

http://img1.sycdn.imooc.com//climg/5cf4c4ec00015a4509190615.jpg

http://img1.sycdn.imooc.com//climg/5cf4c4ec00015c8912310534.jpg

老师设置了还是乱码哦!

好帮手慕柯南 2019-06-03 14:46:53

同学你好!

  1. 添加书本类型页面不需要添加select列表呢,如果同学不是这个意思,可以详细的描述一下吗?

  2. 乱码问题同学在转发之前添加以下语句指定编码格式

response.setHeader("Content-type", "text/html;charset=UTF-8");

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 KelvinChung #1
    老师不好意思又麻烦您了您看下图
    2019-06-03 14:58:17
好帮手慕柯南 2019-06-03 13:48:16

同学你好!

同学在获取值的时候应该使用map.ID和map.CategoryName来获取值

http://img1.sycdn.imooc.com//climg/5cf4b490000180fe03880057.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 KelvinChung #1
    请问一下老师,就是我的servlet中如果request.getRequestDispatcher("/catgory.jsp").forward(request,response);重定位到添加书本类型页面的话,select中就不会出现我添加的类别,这个要怎么解决呢??还有如果我request.getRequestDispatcher("/addBook.jsp").forward(request,response);定位过去会出现中文乱码问题
    2019-06-03 14:02:09
提问者 KelvinChung 2019-06-03 12:28:58
提问者 KelvinChung 2019-06-03 12:13:47

http://img1.sycdn.imooc.com//climg/5cf49e1e0001acc013580795.jpg

就是箭头指的地方,用<option value="${map.get("ID")}">${map.get("CategoryName")}</option>这一句拿出map里面的值有点怪怪的,里面的元素应该是map类型存在list中,请问老师这里应该怎么改呢?添加之后是显示不出来下拉列表图书分类的值的

好帮手慕柯南 2019-06-03 11:23:18

同学的写法是正确的,同学是结果没有出来吗?或者是有什么不理解的吗?可以具体说一下,老师会帮你解惑的哦,祝学习愉快~

  • 提问者 KelvinChung #1
    显示不出来哦,就是jsp下拉列表那里,<c:forEach items = "${category}" var = "map"> <option value="${map.get("ID") }">${map.get("CategoryName")}</option> </c:forEach>我觉得这样写好奇怪...
    2019-06-03 12:06:58
  • 好帮手慕柯南 回复 提问者 KelvinChung #2
    同学request的作用域只是一次请求,同学在跳转至添加图书页面时,如果只是直接跳转至页面是取不到值的。同学需要获取一下分类的值
    2019-06-03 12:14:26
  • 提问者 KelvinChung 回复 好帮手慕柯南 #3
    老师您再看看,不知道为什么请求转发到当前页面的时候又没有显示下拉列表值,当我请求转发到addcategory页面后是有值的,不过是乱码??
    2019-06-03 12:29:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师