`

web.xml中"web-app_2_5.xsd"引起的EL表达式无效异常

    博客分类:
  • jsp
 
阅读更多
web.xml中"web-app_2_5.xsd"引起的EL表达式无效异常

org.apache.jasper.JasperException: Unable to convert string "${tasks}" to class "java.util.Collection" for attribute "items": Property Editor not registered with the PropertyEditorManager
这种异常,试着调了不少时间,tasks是从后台传过来的list集,在前台jsp页面不能使用${tasks},弄的我莫名其妙怎么会出现这样的问题,其实从后台取值并传值到前台来根本就没有错,而前台JSP页面EL表达式无效,解析不到EL表达式,引起的原因是web.xml中:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
注意里面的web-app_2_5.xsd,就是这个引起的,在web-app_2_4.xsd中就不会出现这种问题(这个版本的isELIgnored默认设置为false)。
在不改变web.xml2.5版本的情况下解决办法是:在jsp页面头加:<%@page isELIgnored="false"%>   问题得以解决。
 
自定义标签
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="com.cn.tag.Person"%>
<%@ taglib uri="/mytag" prefix="hello" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  <%
   List<Person> persons = new ArrayList<Person>();
   Person p1  = new Person("caodaoxi",25,"caodaoxi1234@163.com");
   Person p2  = new Person("caodaoxi",25,"caodaoxi1234@163.com");
   Person p3  = new Person("caodaoxi",25,"caodaoxi1234@163.com");
   Person p4  = new Person("caodaoxi",25,"caodaoxi1234@163.com");
   Person p5  = new Person("caodaoxi",25,"caodaoxi1234@163.com");
   persons.add(p1);
   persons.add(p2);
   persons.add(p3);
   persons.add(p4);
   persons.add(p5);
  %>
  <hello:tb ps="<%=persons%>"/>
  </body>
</html>
hello.tld
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>hello</short-name>
 <tag>
  <name>hello</name>
  <tag-class>com.cn.tag.Hello</tag-class>
  <body-content>empty</body-content>
  <attribute>
   <name>color</name>
   <required>true</required>
  </attribute>
  <attribute>
   <name>backgroundImage</name>
   <required>false</required>
  </attribute>
 </tag>
 <tag>
  <name>tb</name>
  <tag-class>com.cn.tag.TagDemo1</tag-class>
  <body-content>empty</body-content>
  <attribute>
   <name>ps</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
   <type>java.util.List</type>
  </attribute>
 </tag>
</taglib>

TagDemo1.java
package com.cn.tag;
import java.io.IOException;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/*
 *项目名称:tag
 *类名: TagDemo1.java
 *作者: 曹道喜
 *创建日期: Oct 17, 2011  11:52:56 AM
 *类说明:
 */
public class TagDemo1 extends TagSupport {
 
 private List<Person> ps = null;
 public List<Person> getPs() {
  return ps;
 }
 public void setPs(List<Person> ps) {
  this.ps = ps;
 }
 @Override
 public int doStartTag() throws JspException {
  // TODO Auto-generated method stub
  JspWriter out = pageContext.getOut();
  StringBuffer buffer = new StringBuffer();
  System.out.print("-------------");
  try {
   buffer.append("<table>" +
       "<tr>" +
        "<th>姓名</th>" +
        "<th>年龄</th>" +
        "<th>邮箱</th>" +
       "</tr>"
       );
   System.out.print(buffer.toString());
   if(ps!=null&&ps.size()!=0){
    for(Person person:ps){
     buffer.append("<tr>" +
         "<td>"+person.getName()+"</td>" +
         "<td>"+person.getAge()+"</td>" +
         "<td>"+person.getEmail()+"</td>" +
          "</tr>"
         );
    }
   }else{
    buffer.append("<td>没有想要的数据</td>");
   }
   buffer.append("</table>");
   out.write(buffer.toString());
   out.flush();
   out.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return TagSupport.SKIP_BODY;
 }
 @Override
 public int doEndTag() throws JspException {
  // TODO Auto-generated method stub
  return super.doEndTag();
 }
 @Override
 public int doAfterBody() throws JspException {
  // TODO Auto-generated method stub
  return super.doAfterBody();
 }
}
分享到:
评论

相关推荐

    maven项目中的EL表达式问题

    由于Web 2.5及更高版本的规范默认支持EL表达式的解析,可以通过修改web.xml文件的`&lt;web-app&gt;`标签中的`version`属性值来实现。 ```xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app xmlns:xsi=...

    tomcat5.5.28支持EL 表达式的解决方法.

    为了使Tomcat 5.5.28支持EL表达式,首先需要修改部署目录下的`web.xml`文件。具体操作如下: 1. **定位web.xml文件**:在你的Web应用的`WEB-INF`目录下找到`web.xml`文件。如果是在Tomcat服务器级别的配置,则需...

    jsp 不支持EL表达式,解决办法.docx

    1. **EL 识别问题**:如果 JSP 页面无法识别 EL 表达式,检查 `web.xml` 配置是否正确,同时确保 JSP 页面没有显式禁用 EL。 2. **IDE 配置**:在使用 IDE(如 IntelliJ IDEA)开发时,确保 IDE 的 JSP 插件和服务器...

    jstl详细配置讲解

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"&gt; &lt;jsp-config&gt; &lt;taglib-uri&gt;/WEB-INF/c.tld&lt;/taglib-uri&gt; &lt;taglib-location&gt;/WEB-INF/c.jar&lt;/taglib-location&gt; &lt;/jsp-config&gt; &lt;!-- ....

    解决jsp开发中不支持EL问题

    4. `web-app_2_5.xsd` - Servlet 2.5和JSP 2.1 如果你的`web.xml`文件使用的是Servlet 2.4之前的版本,那么EL可能默认被忽略,需要在每个JSP页面的指令中显式设置`isELIgnored="false"`,例如: ```jsp ``` 或者...

    EL表达式 jsp

    2. 方法二:修改`web.xml`配置文件中的`&lt;web-app&gt;`标签,确保其版本为2.4或更高,且不包含禁用EL的配置。例如: ```xml &lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=...

    浅谈java里的EL表达式在JSP中不能解析的问题

    在文章中提到了web-app_2_2.xsd至web-app_2_5.xsd等几个不同版本的XML Schema,但没有说明具体是哪个版本解决了问题。 在文章中还提到了web-app的命名空间从j2ee变更为javaee的变化,这对应于J2EE 1.4到Java EE 5的...

    自定义EL函数

    在Java Web开发中,Expression Language(EL)是一种强大的表达式语言,用于在JSP页面、JSF组件或者Servlet中访问和操作JavaBeans属性。EL提供了一种简洁的方式来获取和设置对象的属性,以及调用对象的方法。然而,...

    最全最经典spring_mvc教程

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt; &lt;servlet-name&gt;spring&lt;/servlet-name&gt; &lt;servlet-class&gt;org.springframework.web.servlet....

    springmvc入门

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt; &lt;servlet-name&gt;spmvc&lt;/servlet-name&gt; &lt;servlet-class&gt; org.springframework.web.servlet.DispatcherServlet &lt;/servlet-class&gt; &lt;load-on-startup&gt;1&lt;/load...

    jsp 不支持EL表达式,解决办法

    1. **整体升级项目配置**:通过修改`web.xml`文件中的DTD版本,将项目从Servlet2.3/JSP1.2升级至Servlet2.4/JSP2.0,使得整个项目能够支持EL表达式。 2. **局部开启EL表达式支持**:对于特定的JSP页面,可以通过设置...

    JSTL详细配置

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"&gt; &lt;jsp-config&gt; &lt;taglib-uri&gt;http://java.sun.com/jstl/fmt&lt;/taglib-uri&gt; &lt;taglib-...

    JSP页面无法识别EL表达式问题解决方案

    总的来说,当遇到JSP页面无法识别EL表达式的情况时,检查并调整JSP页面头部的 `isELIgnored` 属性或升级web.xml的版本是有效的解决策略。同时,确保你的JSP环境配置正确,例如Servlet容器(如Tomcat)的版本支持EL...

    混用JSTL及EL和Struts.txt

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"&gt; ``` 这里需要注意的是,版本号和命名空间URL应该与实际使用的JEE版本相匹配。 ###...

    JSTL1.2详细配置

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"&gt; &lt;/web-app&gt; ``` **4. 兼容性和依赖** JSTL 1.2.x与统一EL、JSF 1.2、JSP 2.1以及...

    standard和jstl包

    standard.jar中的“standard”标签库提供了对EL表达式的支持,使得开发者可以更方便地在JSP页面中使用EL。 解决"uri="http://java.sun.com/jsp/jstl/core"错误”的步骤如下: 1. 下载standard.jar和jstl.jar文件,...

    spring.docx

    如果遇到Spring框架中的El表达式无法解析的问题,可能是因为Servlet版本过低,不支持El表达式。这时需要更新`web.xml`文件,将其改为对应的JSP版本,例如改为`web-app_3_0.xsd`。 综上所述,Spring框架是一个强大的...

    jsp页面中表达式语言中的$符号不起作用的解决方法

    instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"&gt;`。 2. **升级Web服务器**:如果Web服务器(如Tomcat)的版本过低,不支持...

    笔试试题-J2EE开发技术

    - **解析**:在JSP2.0中,通过表达式语言(Expression Language, EL)可以直接访问`pageContext`中的`request`对象来获取上下文路径。正确的方式是`${pageContext.request.contextPath}`,因为`contextPath`属性存储...

Global site tag (gtag.js) - Google Analytics