2016-05-01 15 views
0

jspカスタムタグをレイアウト目的で作成しようとしています。JSPカスタムタグ - フラグメント属性が機能しない

私は場合、私は

<%@ tag language="java" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

<%@ attribute name="heading" required="false" %> 
<%@ attribute name="footer" fragment="true"%> 

<div class="panel panel-default"> 

    <c:if test="${not empty heading}"> 
     <div class="panel-heading"> 
      <c:out value="${heading}"></c:out> 
     </div> 
    </c:if> 

    <div class="panel-body">  
     <jsp:doBody/>        
    </div> 

    <div class="panel-footer"> 
     <jsp:invoke fragment="footer"/> 
    </div> 
</div> 

ようpanelLayout.tagファイルを作成し、私は

<%@taglib prefix="t" tagdir="/WEB-INF/tags" %> 

<t:panelLayout> 
    This is my body        
    <jsp:attribute name="footer"> 
     This is my footer 
    </jsp:attribute> 
</t:panelLayout> 

次のようにJSPのいずれかでそれを使用していると私は

エラー以下
org.apache.jasper.JasperException: /WEB-INF/pages/Groups.jsp (line: 86, column: 33) jsp:attribute must be the subelement of a standard or custom action 
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42) 
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:443) 
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:89) 
    org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1126) 
    org.apache.jasper.compiler.Parser.parseElementsScriptless(Parser.java:1499) 
    org.apache.jasper.compiler.Parser.parseBody(Parser.java:1666) 
    org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:986) 
    org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1258) 
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1451) 
    org.apache.jasper.compiler.Parser.parse(Parser.java:138) 
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242) 
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:102) 
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:374) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:354) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:341) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:662) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:364) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:263) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:992) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:939) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.64 logs. 

を取得していますフッターの断片を削除し、それは正常に動作しています。

は、私がここにも https://docs.oracle.com/cd/E19879-01/819-3669/bnamr/index.html

検索stackoverflowのおよびその他の参照から参照を得たが、私が間違っていたものを見つけることができませんでした。

助けてください。

+0

あなたのタグハンドラクラスはどこですか? plzもtldファイルと共有する –

答えて

0

あなたは<jsp:body></jsp:body>間体を囲むしようとすることができます:

<t:panelLayout> 
    <jsp:attribute name="footer"> 
     This is my footer 
    </jsp:attribute> 
    <jsp:body> 
     This is my body 
    </jsp:body> 
</t:panelLayout> 

チェックThe Java EE 5 Tutorial - Types of Tags

のjsp:body要素

あなたはまた、明示的で簡単なタグのボディを指定することができますjsp:body要素を使用します。 1つ以上の属性がjsp:attribute要素で指定されている場合、jsp:bodyはタグの本体を指定する唯一の方法です。 1つ以上のjsp:attribute要素がタグ呼び出しの本文に表示されていて、jsp:body要素が含まれていない場合、タグには空の本文があります。

関連する問題