在SpringMVC网页项目中 js出现Uncaught SyntaxError: Unexpected number异常

第一次写博客 记录一下学习中遇到的问题

首先说明一下项目的要求:点击一个按钮,发送一个restful风格url请求
然后在数据库中查询出相应的数据,用Map<String , String>的List泛型集合保存,将该集合保存在请求域中,名为info
显示数据的页面中,<script>标签内定义一个var,它的值就是${info}
然后,转发到显示数据的页面,用EL表达式或者java小脚本显示出上面保存的数据

我的RequestMapping是这样的:

@RequestMapping("main/version/modify/{id}")

之后,我根据url带的参数,查询出了数据集合,如下所示:

List<Map<String, String>> list = versionService.queryVersion(id);

接下来,我就执行新建了一个ModelAndView对象,用它的addObject方法保存了这个集合
当然,这边在参数的括号内写上HttpServletRequest对象,用reqeust保存也是可以的

request.setAttribute("info", list);

jsp页面中<script>标签内的var如下所示

var arr = ${info};

最后,转发到显示数据的页面,然而什么数据都没有显示
在这里插入图片描述
于是查看了一下js文件中保存的arr到底长啥样,然后发现问题了

var arr = [
		{
			apkFileName=sb-1.0.apk, 
			softwareName=sb, 
			modifyDate=2019-11-11, 
			valueName=预发布, 
			downloads=1, 
			appId=3, 
			versionNo=1.0, 
			versionSize=233.00
		}, 
			
		{
			apkFileName=sb-2.0.apk, 
			softwareName=sb, 
			modifyDate=2019-11-21, 
			valueName=预发布, 
			downloads=1, 
			appId=3, 
			versionNo=2.0, 
			versionSize=123.00
		}
	];

没有错,虽然我的List泛型集合存储的全部是Map<String , String>,但是,在js文件读取这些数据的时候,显然没有把这些数据识别为字符串,证据就是这些数值连双引号都没有
而且浏览器中也提示了Uncaught SyntaxError: Unexpected number异常
这说明js文件把这些数据都识别为数字了
在这里插入图片描述
那么为什么会这样呢,这是因为直接把java里的集合、实体类等放到各种域里,然后让js读取,是没法直接读取的,要把这些数据转为json格式

一般来说,如果我们使用ajax请求,在拦截器的方法上加上@ResponseBody注解,同时我们还导入了处理json的jar包的话,就会自动转换,而在上面的这种情况下,我们并没有将List集合转成json格式,就直接将其保存在请求域中让js读取,自然是会出问题的

所以这边我们需要手动将List集合转为json格式,然后再将其保存在请求域中让js读取

但是…用循环来做的话实在是太繁琐,所以我们可以用jackson.jar内置的对象来处理
如果是Maven项目,导入jackson的pom.xml如下配置

<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl -->
	<dependency>
	    <groupId>org.codehaus.jackson</groupId>
	    <artifactId>jackson-core-asl</artifactId>
	    <version>1.9.13</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
	<dependency>
	    <groupId>org.codehaus.jackson</groupId>
	    <artifactId>jackson-mapper-asl</artifactId>
	    <version>1.9.13</version>
	</dependency>

之后,我们在拦截请求的方法中新建一个ObjectMapper对象,它是jackson提供的一个对象,用这个对象下的writeValueAsString(Object obj)方法,就可以将List集合转为一个json格式的字符串啦

代码如下:

@RequestMapping("main/version/modify/{id}")
	public String goToModifyVersion(@PathVariable String id , HttpServletRequest request){
	
		List<Map<String, String>> list = versionService.queryVersion(id);
		
		//新建ObjectMapper对象
		ObjectMapper mapper = new ObjectMapper();
		String date = null;
		try {
			//调用writeValueAsString()方法
			date = mapper.writeValueAsString(list);
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		request.setAttribute("info", date);
		return "forward:/page/developer/versionmodify.jsp";
	}

这样子就搞定啦~

而且,js文件中保存的arr也变成下面这样


	var arr = [
		{
			"apkFileName":
			"sb-1.0.apk",
			"softwareName":"sb",
			"modifyDate":"2019-11-11",
			"valueName":"预发布",
			"downloads":1,
			"appId":3,
			"versionNo":"1.0",
			"versionSize":233.00
		},
		{
			"apkFileName":
			"sb-2.0.apk",
			"softwareName":"sb",
			"modifyDate":"2019-11-21",
			"valueName":"预发布",
			"downloads":1,
			"appId":3,
			"versionNo":"2.0",
			"versionSize":123.00
		}
	];

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值