EL表达式遇到的问题

今天在为客户做一个新需求,重新做几个JSP页面和几个servlet,这本不是难事,但难在工作好几个月都没怎么碰过JSP了,用着JSTL还是有点战战兢兢,不知道会出什么问题。

1)很快,在写JS的时候用EL表达式就遇到问题啦。

直接alert(${sql})这样似乎是正确的,这里的sql是我在前一个转发到此JSP的servlet中通过request.setAttribute方法进行设入的,很明显我们在HTML代码中直接这样取是没问题的。

但这样不行,JS运行不了。想想哪里出问题了。

杯具罗,实在没办法,随便加个单引号,改成

alert('${sql}');
 

这次有东西啦,但出现个这个东西。

谁不知道它不是数字啊,你提醒顶个鸟用啊。

看来它不听话,我们再改,改成

alert("${sql}");

   这下竟然没问题了。

直接一串东西出来了:

总算正确啦。但要记住的是,如果我们是直接跟其他JS代码进行拼接,我们并不需要双引号,而是直接写入:

var url = "<%=request.getContextPath()%>/websearch/addBookSpecial_new.jsp?sql=${sql}";

如这样,当然我们另外把它当成字符串加上也不为过。

有些童鞋可能直接拿到一串东西跟我类似的带%这样的东西直接来传,那么很杯具,它会报一下错误:

警告: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: isHexDigit

    相信不少东西看到这些都相当的激动啊,传个参数而已,用得着么。

不要激动,慢慢来。URL中是不允许出来那些奇怪的字符的,所以不要怪浏览器。

我们只需要将URL编一下码就OK了:

url = encodeURI(url);
url = encodeURI(url);

  这里有些朋友说是一次,有些朋友说两次,不过我自己试了是两次,只有经过两次编码后,再在页面处通过:

String sql = request.getParameter("sql");
sql = java.net.URLDecoder.decode(sql,"utf-8");

  进行转码就可以取出参数了,这样取出的是正常的。

 

2)以前就遇到过用EL表达没值的时候会输出空,这个比较郁闷,好好地一个单元格,如果你没值,连那个单元格都是面目全非的。这个不是EL表达式的问题,对,这个不是。但既然这篇文章讲到EL表达式,这个也就赖到它身上了。反正有一个问题,再多一个也不为过。

<c:forEach items="${books}" var="book">
	<tr>
		<td>${book.title }</td>
		<td>${book.author }</td>
	</tr>
</c:forEach>

  外面当然有表格包含住它,并且我们为此表格的单元格设了如下样式:

table td{
    border-bottom:1px solid #F0F0F0;
}

  这个相信大家都看得懂,就不多说了,一般情况下这当然是没问题了。

但大家看看下面这个情况:

 

看到这种情况,相信你不能再淡定了。

为什么?明明设了border-bottom,是啊,是设了啊,但为什么没有啊。请注意,这种情况是在IE9的兼容模式下出现的,IE6,7,8都有同样的情况,这个估计是微软的问题。在其他浏览器上是正常的。

但有问题始终是要解决的。

解决方法很简单,我们只需要在前面的table的样式那里添加多一个:

border-collapse: collapse;

   注意,是table的样式,不是td的样式。这样,我们再看一下效果。

当然,如果还有些童鞋杯具的弄不出来,可以尝试在td样式处加上:

empty-cells: show;

   一般情况下就没什么问题了。

 

解决完问题,又要继续努力BlogWriter,希望早日完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值