java自定義標籤異常
阿新 • • 發佈:2019-01-09
嚴重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /WEB-INF/pages/svg/doc-svg/index.jsp(198,5) According to TLD or attribute directive in tag file, attribute key does not accept any expressions
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1174)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:821)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:840)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1736)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:183)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:332)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
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:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at com.fj.bsfra.web.DpoActionImp.include(DpoActionImp.java:599)
at com.fj.bsfra.web.HandlerJsp.process(HandlerJsp.java:12)
at com.fj.bsfra.web.Handler.doProcess(Handler.java:13)
at com.fj.bsfra.web.ActionProxy.doAction(ActionProxy.java:110)
at com.fj.bsfra.web.ActionProxy.execute(ActionProxy.java:55)
at com.fj.bsfra.web.ActionFilter.doFilter(ActionFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:595)
錯誤原因:自定義標籤不接收任何表示式
修改方法:
自定義標籤中讓標籤屬性正確接收EL表示式物件 Apache .
如何在Java自定義標籤中讓自定義的標籤屬性正確接收EL表示式物件
我們在專案開發中為了更方便靈活的使用Java自定義標籤,往往需要讓自定義的標籤屬性接收一些EL表示式物件,所幸的是apache為我們提供了簡單的實現方式。
需要的jar包:
jstl.jar
standard.jar
其實這兩個包就是我們在使用jstl時所需的兩個包。
要接收EL表示式物件,首先得在標籤的實現類檔案中將這個屬性的物件型別設定為Object型別,在set、get方法中,set方法需要引入apache的類:
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
這個類中有一個evaluate 方法,當el表示式作為引數傳入時,呼叫這個方法,在tag內即可自動把el表示式轉化成所需要的物件。
你只需在set方法裡如下呼叫:
public void setValue(Object value)throws JspException
{
this.value = ExpressionEvaluatorManager.evaluate(
"value", value.toString(), Object.class, this, pageContext);
}
ExpressionEvaluatorManager.evaluate有四個引數。
第一個表示tag的名字,在取el表示式出錯時使用。一般和屬性名字相同。
第二個要求字串,通常簡單呼叫輸入物件的toString方法。
第三個是類,通常用Object.class。
第四個用this即可,
第五個是pageContext變數。
在tld檔案中該標籤屬性的rtexprvalue得設定為true,表示是否支援執行時表示式取值。
OK啦!可以用啦!
org.apache.jasper.JasperException: /WEB-INF/pages/svg/doc-svg/index.jsp(198,5) According to TLD or attribute directive in tag file, attribute key does not accept any expressions
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1174)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:821)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:840)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1530)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1736)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:183)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:332)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
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:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at com.fj.bsfra.web.DpoActionImp.include(DpoActionImp.java:599)
at com.fj.bsfra.web.HandlerJsp.process(HandlerJsp.java:12)
at com.fj.bsfra.web.Handler.doProcess(Handler.java:13)
at com.fj.bsfra.web.ActionProxy.doAction(ActionProxy.java:110)
at com.fj.bsfra.web.ActionProxy.execute(ActionProxy.java:55)
at com.fj.bsfra.web.ActionFilter.doFilter(ActionFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:595)
錯誤原因:自定義標籤不接收任何表示式
修改方法:
自定義標籤中讓標籤屬性正確接收EL表示式物件 Apache .
如何在Java自定義標籤中讓自定義的標籤屬性正確接收EL表示式物件
我們在專案開發中為了更方便靈活的使用Java自定義標籤,往往需要讓自定義的標籤屬性接收一些EL表示式物件,所幸的是apache為我們提供了簡單的實現方式。
需要的jar包:
jstl.jar
standard.jar
其實這兩個包就是我們在使用jstl時所需的兩個包。
要接收EL表示式物件,首先得在標籤的實現類檔案中將這個屬性的物件型別設定為Object型別,在set、get方法中,set方法需要引入apache的類:
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
這個類中有一個evaluate 方法,當el表示式作為引數傳入時,呼叫這個方法,在tag內即可自動把el表示式轉化成所需要的物件。
你只需在set方法裡如下呼叫:
public void setValue(Object value)throws JspException
{
this.value = ExpressionEvaluatorManager.evaluate(
"value", value.toString(), Object.class, this, pageContext);
}
ExpressionEvaluatorManager.evaluate有四個引數。
第一個表示tag的名字,在取el表示式出錯時使用。一般和屬性名字相同。
第二個要求字串,通常簡單呼叫輸入物件的toString方法。
第三個是類,通常用Object.class。
第四個用this即可,
第五個是pageContext變數。
在tld檔案中該標籤屬性的rtexprvalue得設定為true,表示是否支援執行時表示式取值。
OK啦!可以用啦!