如果字符串超出一定长度,我会截断它。我是jsp的新手,所以我这样做是我知道的唯一方式。我有一些javascript会用截断的字符串创建一个新的var。我需要在html中使用这个新的displayTag字符串。但是,我意识到我不能在脚本标签之外使用该var。我怎样才能做到这一点?
<script type="text/javascript">
var displayTag = "${example.name}";
if(displayTag.length > 15) {displayTag=displayTag.substring(0,15)+"..."};
alert(displayTag); // for testing
</script>
<a href="some_link"><c:out value=displayTag/></a> // I know this line will not actually work
答案 0 :(得分:1)
fn:substring
和fn:length
可能就是你想要的。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:choose>
<c:when test="${fn:length(example.name) > 15}">
${fn:substring(example.name, 0, 15)}...
</c:when>
<c:otherwise>
${example.name}
</c:otherwise>
</c:choose>
答案 1 :(得分:0)
你的${example.name}
是一个使用JSP变量的EL表达式; displayTag
是一个Javascript变量,因此您说<c:out value=displayTag/>
无效,因为<c:out ...>
在页面发送到浏览器之前在服务器上运行,因此javascript变量不会甚至存在。
我更喜欢在服务器上执行此类操作,因此即使Javascript关闭或出错也会失败。
执行此操作的EL表达式可能是
${fn:length(example.name) <= 15 ? example.name : fn:substring(example.name, 0, 15) + '...'}
(我没有测试过) +
运算符不适用于EL中的字符串连接,并且没有fn:concat
或fn:append
标准JSTL中的函数,虽然concat似乎是<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
在那种情况下,它将是
${fn:length(example.name) <= 15 ? example.name : x:concat(fn:substring(example.name, 0, 15), '...')}
也就是说,如果example.name的长度为15或更小,只需使用它,否则取下子串并附加“...”,所有这些都在JSP处理过程中在服务器上完成。