【问题标题】:org.apache.jasper.JasperException: #{...} is not allowed in template text [duplicate]org.apache.jasper.JasperException:模板文本中不允许使用 #{...} [重复]
【发布时间】:2013-09-04 02:34:03
【问题描述】:

我试图用 JSP 和 Spring MVC 在浏览器屏幕上显示一条简单的消息。

<h2>#{message}</h2>

但是,它抛出了以下异常:

org.apache.jasper.JasperException: /Ekle/DomainEkle.jsp (line: 9, column: 6) #{...} is not allowed in template text
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:103)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:733)
org.apache.jasper.compiler.Node$ELExpression.accept(Node.java:954)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434)
org.apache.jasper.compiler.Node$Root.accept(Node.java:475)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1798)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)

这是怎么引起的,我该如何解决?

【问题讨论】:

标签: jsp spring-mvc el


【解决方案1】:

使用

  <h2>${message}</h2>

代替

  <h2>#{message}</h2>

${...}是JSP中使用的表达式语言,查看更多here

#{...}是JSF技术相关的表达语言,查看更多here

【讨论】:

  • 谢谢fujy。我学到了一个新东西。 :)
  • #{...} 在 Spring EL 中也用于解析属性等。
  • @aliinsan 不客气
  • @SotiriosDelimanolis 感谢您提供此新信息
【解决方案2】:

要在 JSP 中显示/打印 ModelAttribute,您必须使用 ${..} 表示法。 所以在你的情况下,你应该使用

<h2>${message}</h2>

相反,如果你想访问一个对象字段,你应该使用点符号。

例子:

public Person {
     private String name;
     private String surname;

     public Person(String name, String surname) {
          this.name = name;
          this.surname = surname;
     }

     //getter and setter goes here

}

控制器类:

@Controller
public ExampleController {
    @RequestMapping("/test")
    public ModelAndView testObject() {

         Person p = new Person("Steven","Hawking");
         return new ModelAndView("test", "person", p);
    }
}

在页面中

<h2>${person.name} ${person.surname}</h2>

会显示

史蒂文·霍金

【讨论】:

  • 尊重!节省我很多时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2013-05-25
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多