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();
}
}
分享到:
相关推荐
由于Web 2.5及更高版本的规范默认支持EL表达式的解析,可以通过修改web.xml文件的`<web-app>`标签中的`version`属性值来实现。 ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=...
为了使Tomcat 5.5.28支持EL表达式,首先需要修改部署目录下的`web.xml`文件。具体操作如下: 1. **定位web.xml文件**:在你的Web应用的`WEB-INF`目录下找到`web.xml`文件。如果是在Tomcat服务器级别的配置,则需...
1. **EL 识别问题**:如果 JSP 页面无法识别 EL 表达式,检查 `web.xml` 配置是否正确,同时确保 JSP 页面没有显式禁用 EL。 2. **IDE 配置**:在使用 IDE(如 IntelliJ IDEA)开发时,确保 IDE 的 JSP 插件和服务器...
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <jsp-config> <taglib-uri>/WEB-INF/c.tld</taglib-uri> <taglib-location>/WEB-INF/c.jar</taglib-location> </jsp-config> <!-- ....
4. `web-app_2_5.xsd` - Servlet 2.5和JSP 2.1 如果你的`web.xml`文件使用的是Servlet 2.4之前的版本,那么EL可能默认被忽略,需要在每个JSP页面的指令中显式设置`isELIgnored="false"`,例如: ```jsp ``` 或者...
2. 方法二:修改`web.xml`配置文件中的`<web-app>`标签,确保其版本为2.4或更高,且不包含禁用EL的配置。例如: ```xml <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=...
在文章中提到了web-app_2_2.xsd至web-app_2_5.xsd等几个不同版本的XML Schema,但没有说明具体是哪个版本解决了问题。 在文章中还提到了web-app的命名空间从j2ee变更为javaee的变化,这对应于J2EE 1.4到Java EE 5的...
在Java Web开发中,Expression Language(EL)是一种强大的表达式语言,用于在JSP页面、JSF组件或者Servlet中访问和操作JavaBeans属性。EL提供了一种简洁的方式来获取和设置对象的属性,以及调用对象的方法。然而,...
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet....
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet-name>spmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load...
1. **整体升级项目配置**:通过修改`web.xml`文件中的DTD版本,将项目从Servlet2.3/JSP1.2升级至Servlet2.4/JSP2.0,使得整个项目能够支持EL表达式。 2. **局部开启EL表达式支持**:对于特定的JSP页面,可以通过设置...
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <jsp-config> <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri> <taglib-...
总的来说,当遇到JSP页面无法识别EL表达式的情况时,检查并调整JSP页面头部的 `isELIgnored` 属性或升级web.xml的版本是有效的解决策略。同时,确保你的JSP环境配置正确,例如Servlet容器(如Tomcat)的版本支持EL...
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> ``` 这里需要注意的是,版本号和命名空间URL应该与实际使用的JEE版本相匹配。 ###...
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> </web-app> ``` **4. 兼容性和依赖** JSTL 1.2.x与统一EL、JSF 1.2、JSP 2.1以及...
standard.jar中的“standard”标签库提供了对EL表达式的支持,使得开发者可以更方便地在JSP页面中使用EL。 解决"uri="http://java.sun.com/jsp/jstl/core"错误”的步骤如下: 1. 下载standard.jar和jstl.jar文件,...
如果遇到Spring框架中的El表达式无法解析的问题,可能是因为Servlet版本过低,不支持El表达式。这时需要更新`web.xml`文件,将其改为对应的JSP版本,例如改为`web-app_3_0.xsd`。 综上所述,Spring框架是一个强大的...
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">`。 2. **升级Web服务器**:如果Web服务器(如Tomcat)的版本过低,不支持...
- **解析**:在JSP2.0中,通过表达式语言(Expression Language, EL)可以直接访问`pageContext`中的`request`对象来获取上下文路径。正确的方式是`${pageContext.request.contextPath}`,因为`contextPath`属性存储...