为什么Map(在标签中设置为PageContext的属性)在eclipse中给JSP带来错误?

时间:2016-02-03 18:39:00

标签: java eclipse jsp java-ee taglib

我正在使用Java 7,Eclipse Luna和WildFly 8.2.1。

在Eclipse中,我有一个带有Dynamic Web Module 2.5和Java 1.7的动态Web项目。

我有一个 PageStartTagSupport 类,它扩展了TagSupport。在那里,我创建了一个Map<String, Object>并将其设置为PageContext的属性:

package com.srh.tag;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class PageStartTagSupport extends TagSupport {

    @Override
    public int doStartTag() throws JspException {               
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("NAME", "SRH");

        pageContext.setAttribute("sessionsMap", map);

        return EVAL_BODY_INCLUDE;
    }

    @Override
    public int doEndTag() throws JspException {     
        return EVAL_PAGE;  
    }

}

我还有 PageStartTagExtraInfo 类,它扩展了TagExtraInfo

package com.srh.tag;

import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.TagExtraInfo;
import javax.servlet.jsp.tagext.VariableInfo;

public class PageStartTagExtraInfo extends TagExtraInfo {

    @Override
    public VariableInfo[] getVariableInfo(TagData data) {       
        return new VariableInfo[] {
            new VariableInfo("sessionsMap", "java.util.Map", true, VariableInfo.AT_BEGIN)   
        };      
    }

}

在WEB-INF中我有一个 srhtags.tld 文件:

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">
 <tlib-version>0.0</tlib-version>
 <short-name>NMTOKEN</short-name>
 <tag>
  <description>Session Tag</description>
  <name>pagestart</name>
  <tag-class>com.srh.tag.PageStartTagSupport</tag-class>
  <tei-class>com.srh.tag.PageStartTagExtraInfo</tei-class>
  <body-content>empty</body-content>
 </tag>
</taglib>

现在我创建一个login.jsp,在那里我访问该地图并尝试为其添加一个键和值。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ taglib uri="/WEB-INF/srhtags.tld" prefix="srh"%>
<srh:pagestart/>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%
System.out.println("************* login.jsp: inside");

System.out.println("login.jsp: (original): sessionsMap=" + sessionsMap);
sessionsMap.put("NAME2", "SRH2");
System.out.println("login.jsp: (latest): sessionsMap=" + sessionsMap);

%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>

但问题是Eclipse在这一行上给我错误信息:

sessionsMap.put("NAME2", "SRH2");

错误信息是:

  

该方法在类型中放置(捕获#5-of?,捕获#6-of?)   映射不适用于参数   (String,String)

为什么Eclipse会给我这个错误?

由于

0 个答案:

没有答案