我醉了!!!花时间买教训

遇到问题

本人是小白中的小白,准备在jsp中遍历后端传来的list,结果在<ui><li>中加入<c:forEach>后前端的样式就坏了。源代码如下

<ul id="fh5co-gallery-list">
	<c:forEach items="${suitsList}" var="suitsMap">
		<li class="one-third animate-box col-md-4 col-sm-6"
			data-animate-effect="fadeIn"
			style="background-image: url(${suitsMap.suit.spath});"><a
			href="images/gallery-1.jpg">
				<div class="case-studies-summary">
					<span>匹配度 : ${suitsMap.score}</span>
					<h2>${suitsMap.suit.sname}</h2>
				</div>
		</a></li>
	</c:forEach>
</ul>

尝试解决

  1. 我把的页面复制到HBuilder里去找原因,更方便一些。
  2. 一开始觉得肯定是有css的选择条件是ul > li,一找发现并没有。
  3. 发现foreach放在ul外面样式正常,于是想连着ul一起循环了,再在外面加一层ul(现在想想挺扯淡的),成功循环! 但是每个ul都占了一行(本来是一行显示3个 li )。
  4. 于是我花了很久找 ul 的样式,希望把样式改成可以显示在一行,失败了。
  5. 然后我在随便尝试中在foreach外面加了一层ul发现,样式又坏了。。只要foreach在 ul 和 li 之间就不行。此时已经过去了2个多小时
  6. 吃了个晚饭回来,改变思路,准备用jQuery把 li 代码块append到 ul 里面,但是奈何本人是小白中的小白,jQuery用的十分不熟练,又整了2个多小时才勉强实现添加代码块的功能。代码如下(数据是先随便写了一个和我后端数据结构一样的列表)
<script type="text/javascript">
	$(function() {
		var list = [
			{score: 20,
			suit: {"name":"name啊"},}
			,
			{score: 20,
			suit: {"name":"name啊"},}
		];
		alert(suitsList);
		$.each(list, function(n,values) {
			$(values).each(function() {
				var htmladd = "";
				htmladd +=
					"<li class='one-third animate-box col-md-4 col-sm-6 fadeIn animated-fast' data-animate-effect='fadeIn' style='background-image: url("
				htmladd +=this.suit.spath;
				htmladd +="); '>";
				htmladd += "<a href='detail.jsp?sid="
				htmladd += this.suit.sid;
				htmladd +="'>";
				htmladd += " <div class='case-studies-summary'>";
				htmladd += " <span>"
				htmladd += this.score;
				htmladd += "</span>";
				htmladd += " <h2>"
				htmladd += this.suit.name;
				htmladd += "</h2>";
				htmladd += " </div>";
				htmladd += " </a>";
				htmladd += " </li>";
				$("#fh5co-gallery-list").append(htmladd);
			});
		});
	});
</script>
  1. jQuery实现添加 li 的过程其实很曲折,当成功显示的一瞬间,别提有多高兴,接下来只用拿到后端传来的数据就行了。网上查了一下,很多都说用ajax,我想了一下我的这个情况好像不太适合用ajax,更何况我还不会。。
  2. 我上网找了很多方法,比如把数据放到hidden标签里面,再用jq取出来、在js中用el表达式取var suitsList='${suitsList}',取出来都是String类型,遍历不了。
  3. 还有一个方法是用JSON来传数据,但是说实话JSON还没怎么用过,得现学,这时候已经临近12点了,现学还不知道什么时候能整好。
  4. 准备先睡觉吧,头发要紧,明天起床再继续。一想到就为了这个破样式,浪费了一下午加一晚上都没搞好, 气得要命。
  5. 就纳闷下午找样式找了那么久为啥找不到,很不科学。回到eclipse里面,随手 ctrl+alt+up 把foreach移到 ul 外面,发现样式竟然好了,而且list也都遍历出来了。。。。

问题原因

其实我也不知道为什么原来坏着的突然就好了。一切在我的认知范围内,都非常的不科学,先是莫名其妙的CSS坏了(现在回想可能是因为偷懒,重新编辑了jsp没有重启项目,就简单刷新了下页面),我当时也没细想原因,直接去找解决方法了,换到HBuilder里面也在 ul 和 li 中间加了foreach标签,显示依旧异常(可能是ul和li中间不能有其他标签)。最后在eclipse中又好了应该是因为foreach被解析成循环,不在页面中作为标签存在了,所以页面正常了。

这么一分析的话,我认为应该是因为我最早偷懒,在修改了jsp(添加了foreach标签)页面后没有重启项目,jsp没有重新编译的,导致foreach标签没有正确解析成循环语句导致的最初样式的丢失。

教训

  1. 敲代码不要老想着偷懒,有时候偷点小懒要花几倍甚至几十几百倍的时间来弥补。
  2. 遇到一些奇奇怪怪的问题先重启项目或者把项目从服务器里remove掉重新发布一下再试试,可能有奇效。
  3. 遇到问题不要光想,要多动手试,很多时候我是在想我应该怎么做,如果我能早一点动手把项目重启了,就不会浪费这么多时间了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值