Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
超简单JSP-Javascript问题_Javascript_Jsp - Fatal编程技术网

超简单JSP-Javascript问题

超简单JSP-Javascript问题,javascript,jsp,Javascript,Jsp,如果字符串超过一定长度,我将截断它。我对jsp非常陌生,所以我用我知道的唯一方法来做。我有一点javascript,它将创建一个带有截断字符串的新变量。我需要在html中使用这个新的displayTag字符串。然而,我意识到我不能在脚本标记之外使用该变量。我怎样才能做到这一点 <script type="text/javascript"> var displayTag = "${example.name}"; if(displayTag.length > 15

如果字符串超过一定长度,我将截断它。我对jsp非常陌生,所以我用我知道的唯一方法来做。我有一点javascript,它将创建一个带有截断字符串的新变量。我需要在html中使用这个新的displayTag字符串。然而,我意识到我不能在脚本标记之外使用该变量。我怎样才能做到这一点

 <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

var displayTag=“${example.name}”;
如果(displayTag.length>15){displayTag=displayTag.substring(0,15)+“…”};
警报(显示标签);//用于测试
//我知道这条线实际上行不通
而且很可能就是你想要的

<%@ 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>

${fn:substring(example.name,0,15)}。。。
${example.name}

您的
${example.name}
是一个使用JSP变量的EL表达式
displayTag
是一个Javascript变量,因此正如您所说的
将不起作用,因为
在页面发送到浏览器之前在服务器上运行,所以Javascript变量甚至不存在

我更喜欢在服务器上做这种事情,这样即使Javascript关闭或出现错误,它也能工作

执行此操作的EL表达式可能是

${fn:length(example.name) <= 15 ? example.name : fn:substring(example.name, 0, 15) + '...'}

也就是说,如果example.name的长度为15或更少,只需使用它,否则就使用子字符串并附加“…”,所有这些都是在服务器上完成的,作为JSP处理的一部分。

@RobG,这不是Javascript。这就是EL,它由Java解释。当浏览器最终运行它时,它将看到一个文本字符串,而不是
${example.name}
。即使它只是
${example.name}
,JS仍然有效,因为
${example.name}
在一个字符串中。我的问题是,我不知道如何获得这个字符串的长度:${example.name},因为我不能像在普通java中那样只使用example.name.length()。@Charlotte我已经回答了这个问题
fn:substring
以及
fn:length
将允许您执行所需操作。JSTL函数非常有用:)。如果我想将字符串附加到substring的结果中,该怎么办?这似乎对我不起作用……这个答案附加在子字符串的结果之后:在
中,它将“…”放在结束}之后。(顺便说一句,我很难理解为什么JSTL在这类事情上比老式的
更好,因为这种测试可以用一行Java而不是八行JSTL快速轻松地完成。)@nnnn scriptlets允许业务逻辑泄漏到视图层(除其他外)。这就是为什么不鼓励使用它们的原因。您不需要显式连接。这个例子已经为您做了。是的,显然+“…”不起作用。我看不到任何使用buildit函数的方法,因为没有append-jsp函数。我将在另一个问题中询问它
${fn:length(example.name) <= 15 ? example.name : x:concat(fn:substring(example.name, 0, 15), '...')}