Java servlet 将Map传到jsp中,通过<c:forEach >怎么将map中的值读取到?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java servlet 将Map传到jsp中,通过<c:forEach >怎么将map中的值读取到?相关的知识,希望对你有一定的参考价值。

servlet中的map,提交到JSP:
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("time", currentTime);
sParaTemp.put("count", count));
request.setAttribute("trademap", sParaTemp);
request.getRequestDispatcher("/order.jsp").forward(request,
response);
jsp:遍历读取:
<c:if test="$!empty trademap">
<!-- 查询到的数据集不为空的情况 -->
<c:forEach items="$trademap" var="sd">
<td><input size="30" style="border-style: none"name="a" value="$sd.time" /></td>
这个$sd.time",time报错:Property 'time' not found on type java.lang.String
到底该怎么取到map 中的值?

Java servlet 将Map传到jsp中,用foreach获取map的值的方法:
以下是取值代码:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<%!
public static class TTT
private String name;
public TTT(String name)
this.name = name;

public String getName()
return name;


%>
<%
Map map = new LinkedHashMap();
map.put(new TTT("111"),"aaaaaa");
map.put(new TTT("222"),"bbbbbb");
request.setAttribute("map",map);
%>
<body>
<c:forEach items="$map" var="item">
$item.key.name-$item.value<br/>
</c:forEach>
</body>
</html>
item内保存的是java.util.Map.Entry对象这个对象有getKey,setKey,getValue,setValue方法,这样就可以在forEach内部使用map的key和value了。
参考技术A

EL取map的值用中括号

$tradmap['time']

假如你想遍历map所有的值,可以往request里面放入一个key的list

List<String> list = new ArrayList<String>();
list.add("time");
list.add("count");
request.setAttribute("list", list);

然后在页面遍历

<c:if test="$!empty trademap">
    <c:forEach items="$trademap" var="sd">
        <c:forEach items="$list " var="keys">
            $sd[keys] <!-- 这就遍历出所有的value了 -->
        </c:forEach>
    </c:forEach>
</c:if>

追问

感觉大神来了,我能直接取我想要的值吗?不用遍历可以吗?直接把map,中的value取出来,string s = trademap.count.value;//伪代码。这种想法能实现吗?我就是想得到map中,指定key的value!怎么办?

追答

页面中取,就直接这样

$tradmap['count']  //这个结果就是123

参考技术B 你的MAP之前没有定义current time吧,如果是Date = newDate()获取的currentTime,先把currentTIme转化为字符串,再往里面传,put()方法里面一般都传的是字符串..在你的var后面加上 varStatus="status"
试试好了。。追问

我只是没贴出来,都写好了

追答

这么说吧,你的sParaTemp是一个HashMap对象,而HashMap没有time和count这两个属性.

参考技术C 好像是用中括号,$sd["time"],你试试看追问

不对啊,你再看看我的需求,上面的回答,map中有很多键值对,我想取我要的那个key的value,比如map,我想得到123,将123 放在中,那么该怎么写?

追答

循环Map的keySet吧 然后用key的值获取value( $map["key"] )

参考技术D 你改成$sd.value看看行不行追问

这样写的话:就全部遍历出来了,可我想实现:这样,在我想要的地方显示我想的值应该怎么写?

追答

$sd.value 这是取值

$sd.key 这是取键

你是不是意思就是取里面的这个键?

追问

map中有很多键值对,我想取我要的那个key的value,比如map,我想得到123,将123 放在中,那么该怎么写?

追答

你这是循环只是为了要map中key为count的这一个?如果是这样的话,你就直接

$sParaTemp['count']

就能取得到

如果必须要用这个循环的话,就在里面加一个c:if来判断

<c:if test="$sd.key == 'count'" >$sd.value</if>

h5通过表单将localStorage里的信息传到java后台servlet处理

做技术和人生一样,哪有什么做不到,只有想不到。

乍一看你以为我在开玩笑呢。百度过,没有这种操作。

没有就不能实现了吗 /坏笑

-------------------------------------------------------------------------------华丽丽分割线---------------------------------------------------------------------------------------------------------------------------------------------

localStorage是存储在客户端的,道理上讲和服务端八竿子打不着,除非用ajax。但我就是要用表单,因为有时候上传大文件到服务端要用form提交的,而form里要写data-ajax="false"      (即禁用ajax)

不是举例,但可以清晰的说明操作:


首先是css样式:

<style type="text/css">
#isme{
display:none;
}
</style>

  //你是不希望客户端存的信息(往往是用户名和密码之类的)显示到页面上的对么


表单的内容:

<form method="post" action="你的servlet地址"  enctype="multipart/form-data"  data-ajax="false">
  <input type="file" class="form-control" name="file1"> <!--这个是大文件,好吧不重要!!!可以忽略 -->
     <div id="isme"> 这是你事先存在localStorage里的用户名:<input type="text" id="iname" name="iname"></div> <!--name这个属性一定要有,不知道为什么,但是没有的话后台获取不到-->

</form>

  jQuery:

<script>

$(document).ready(function(){
   $("#iname").val(localStorage.iname);//下划线的表示你已经存好了一个key为iname的值,然后赋给input,不要紧张,这部分不会显示在页面的

});

</script>

  后台servlet:

	public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
		List<String> value = new ArrayList<String>();//万一你一高兴写了好几个input想要传递localStorage
		response.setCharacterEncoding("utf-8");
                //上传大文件的部分在分类“soga开发实录”第三篇里有
                try{
                	DiskFileItemFactory factory = new DiskFileItemFactory();
                    //2、创建一个文件上传解析器
                    ServletFileUpload upload = new ServletFileUpload(factory);
                     //解决上传文件名的中文乱码
                    upload.setHeaderEncoding("UTF-8"); 
                    //3、判断提交上来的数据是否是上传表单的数据
                    List<FileItem> list = upload.parseRequest(request);
                    for(int index=0;index<list.size();index++){
                    	 //如果fileitem中封装的是普通输入项的数据
                            String name = list.get(index).getFieldName();
                            //解决普通输入项的数据的中文乱码问题
                            value.add(list.get(index).getString("UTF-8"));
                            System.out.println(name + "=" + value.get(index));                        
                    }
                }catch (Exception e) {
                    e.printStackTrace();
                    
                }
    }

  这算是小心机吧,不过可能能帮到一些人。



以上是关于Java servlet 将Map传到jsp中,通过<c:forEach >怎么将map中的值读取到?的主要内容,如果未能解决你的问题,请参考以下文章

JSP页面Form表单文本框内容传到servlet乱码问题

jsp 怎么用java和jsp传值

07-jsp基本了解

jsp中,用ajax获取数据

java servlet中文乱码

servlet乱码