jstl + EL 截取字符串遇到的问题.欢迎大家来看看.

时间:2022-11-16 14:03:48

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="taglib.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>FileList.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
<center>
FileList
<hr width="80%">
<table border="1" style="width: 80%;word-break:break-all;text-align: center;">
<tr>
<td>ID</td>
<td>标题</td>
<td>内容</td>
<td>发表日期</td>
</tr>
<c:forEach items="${fileslist}" var="file" >
<tr>
<td style="width: 5%;">${file.id }</td>
<td style="width: 20%;">${file.titleL }</td>
<td style="width: 70%;">
<c:set var="testStr" value="${file.content}">
    <c:choose>
         <c:when test="${fn:length(testStr) > 20}">
            <c:out value="${fn:substring(testStr, 0, 20)}" />
         </c:when>
         <c:otherwise>
            <c:out value="${testStr}" />
         </c:otherwise>
    </c:choose>
</c:set>
</td>
<td style="width: 5%;"><fmt:formatDate value="${file.createdate }" pattern="yyyy-MM-dd HH:mm" /></td>
</tr>
</c:forEach>

</table>
</center>
</body>
</html>




错误信息如下:

2009-8-8 1:16:54 org.apache.catalina.core.ApplicationDispatcher invoke
严重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for c in /filelist.jsp</h3><p>42: Encountered illegal body of tag "c:set" tag, given its attributes.</p>
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:74)
at org.apache.jasper.compiler.Validator.validateXmlView(Validator.java:1799)
at org.apache.jasper.compiler.Validator.validate(Validator.java:1745)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:166)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
2009-8-8 1:16:54 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for c in /filelist.jsp</h3><p>42: Encountered illegal body of tag "c:set" tag, given its attributes.</p>
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:74)
at org.apache.jasper.compiler.Validator.validateXmlView(Validator.java:1799)
at org.apache.jasper.compiler.Validator.validate(Validator.java:1745)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:166)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)


请各位达人指点一二.谢谢

16 个解决方案

#1


那个标签库引入成功了嘛

#2


<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

#3


引用 1 楼 yefengmeander 的回复:
那个标签库引入成功了嘛


<%@ include file="taglib.jsp"%>
标签都应该在这个JSP里 LZ的问题是不是因为参数啊 我没用过JSTL 但是我搜索了下
  <p>42: Encountered illegal body of tag "c:set" tag, given its attributes. </p> 

这句话似乎是告诉你参数不合法 LZ你自己检查下吧

#4


引用 2 楼 valen_jia 的回复:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>


00



 

#5


引用 2 楼 valen_jia 的回复:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

把这个加上,初学者经常会忘记啊

#6


 没看到LZ include  tag.jsp了? 
  这样的问题 LZ 应该不会犯  
  应该是你的  (bean|entity ) 包 和你 EL 输出的属性 不符合  你仔细检查下  

#7


<c:set var="testStr" value="${file.content}">
     <c:choose>
         <c:when test="${fn:length(testStr) > 20}">
               <c:out value="${fn:substring(testStr, 0, 20)}" />
         </c:when>
         <c:otherwise>
              <c:out value="${testStr}" />
         </c:otherwise>
         </c:choose>
   </c:set>

红色部分删除掉,修改成这样
<c:set var="testStr" value="${file.content}" />

#8


导入标签库

#9


<c:set/>  少了个/斜杠

#10


看错了....

#11


忘了给大家说一下.为了导入JSTL标签方便,我通常把这些导入的语句都放到了taglib.jsp中.该文件内容正如.再次谢谢大家关注.


<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

#12


楼主看7楼,应该就是那的问题

#13


引用 7 楼 sangshusen_1988 的回复:
<c:set var="testStr" value="${file.content}">
    <c:choose>
        <c:when test="${fn:length(testStr) > 20}">
              <c:out value="${fn:substring(testStr, 0, 20)}" />
        </c:when>
        <c:otherwise>
              <c:out value="${testStr}" />
        </c:otherwise>
        </c:choose>
 </c:set>

红色部分删除掉,修改成这样
<c:set var="testStr" value="${file.content}" />


试试,如果还不行就在页面里试试添加标签。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

#14


13楼...您的作法我试过.还是不行.不过还是谢谢你的关注...

#15


应该就是你c:set这个标签的问题,试试7楼的做法

#16


<c:set var="testStr" value="${file.content}"/>
 <c:choose>
<c:when test="${fn:length(testStr) > 20}">
<c:out value="${fn:substring(testStr, 0, 20)}" />
</c:when>
<c:otherwise>
<c:out value="${testStr}" />
</c:otherwise>
</c:choose>


#1


那个标签库引入成功了嘛

#2


<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

#3


引用 1 楼 yefengmeander 的回复:
那个标签库引入成功了嘛


<%@ include file="taglib.jsp"%>
标签都应该在这个JSP里 LZ的问题是不是因为参数啊 我没用过JSTL 但是我搜索了下
  <p>42: Encountered illegal body of tag "c:set" tag, given its attributes. </p> 

这句话似乎是告诉你参数不合法 LZ你自己检查下吧

#4


引用 2 楼 valen_jia 的回复:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>


00



 

#5


引用 2 楼 valen_jia 的回复:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

把这个加上,初学者经常会忘记啊

#6


 没看到LZ include  tag.jsp了? 
  这样的问题 LZ 应该不会犯  
  应该是你的  (bean|entity ) 包 和你 EL 输出的属性 不符合  你仔细检查下  

#7


<c:set var="testStr" value="${file.content}">
     <c:choose>
         <c:when test="${fn:length(testStr) > 20}">
               <c:out value="${fn:substring(testStr, 0, 20)}" />
         </c:when>
         <c:otherwise>
              <c:out value="${testStr}" />
         </c:otherwise>
         </c:choose>
   </c:set>

红色部分删除掉,修改成这样
<c:set var="testStr" value="${file.content}" />

#8


导入标签库

#9


<c:set/>  少了个/斜杠

#10


看错了....

#11


忘了给大家说一下.为了导入JSTL标签方便,我通常把这些导入的语句都放到了taglib.jsp中.该文件内容正如.再次谢谢大家关注.


<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

#12


楼主看7楼,应该就是那的问题

#13


引用 7 楼 sangshusen_1988 的回复:
<c:set var="testStr" value="${file.content}">
    <c:choose>
        <c:when test="${fn:length(testStr) > 20}">
              <c:out value="${fn:substring(testStr, 0, 20)}" />
        </c:when>
        <c:otherwise>
              <c:out value="${testStr}" />
        </c:otherwise>
        </c:choose>
 </c:set>

红色部分删除掉,修改成这样
<c:set var="testStr" value="${file.content}" />


试试,如果还不行就在页面里试试添加标签。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

#14


13楼...您的作法我试过.还是不行.不过还是谢谢你的关注...

#15


应该就是你c:set这个标签的问题,试试7楼的做法

#16


<c:set var="testStr" value="${file.content}"/>
 <c:choose>
<c:when test="${fn:length(testStr) > 20}">
<c:out value="${fn:substring(testStr, 0, 20)}" />
</c:when>
<c:otherwise>
<c:out value="${testStr}" />
</c:otherwise>
</c:choose>