访问JSP页面时碰上了这个问题,网上说是由于没有包含父类导致的,但是我明明有把父类包含进来,还是不能编译,不知道怎么解决?大概代码如下:JSP页面
<%@ page  contentType="text/HTML;charset=GB2312" %> 
<%@ page import="test.*" %>
<%@ taglib  prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib  prefix="x"  uri="http://java.sun.com/jsp/jstl/xml" %> <% CHtmlElement abc = new CHtmlElement(); //如果把这后面的代码全部去掉就能正常访问,说明CHtmlElement是被正确包含的
CHtmlSelect select = new CHtmlSelect();
select.name = "SlectForm";
select.multiple = "";
String values[] = {"naying", "wanfei"};
select.values = values;
select.search = "na";
out.println(select); //出错提示行%>CHtmlElement.java 
package test;public class CHtmlElement 
{
public String toString()
{
return "<>";
}
}CHtmlSelect.java
package test;public class CHtmlSelect extends CHtmlElement
{
}CHtmlSelect.java CHtmlElement.java 是放在一起的,在JSP页面所在目录下的WEB-INF\classes\test下面两个类都编译成功并生成了相应的class文件

解决方案 »

  1.   

    如果把CHtmlSelect.java 改成这样package test;public class CHtmlSelect extends CHtmlElement
    {
        public String toString()
        {
            return "<>";
        }
    }
    则能编译通过,但是运行时会提示NoClassDefFoundError: CHtmlSelect找不到CHtmlSelect,我已经尝试把CHtmlSelect类路径加到classpath里面并重启tomcat服务了,但还是报一样的错误更奇怪的是跟CHtmlSelect放在一起的CHtmlElement却不会出现问题
      

  2.   

    加个构造方法试试
    public class public class CHtmlSelect extends CHtmlElement
    {
         public CHtmlSelect(){}
    }
      

  3.   

    加了 但是效果一样 并且CHtmlElement也是没默认构造函数的 但是它能正常加载
      

  4.   

     <% 
         CHtmlElement abc = new CHtmlElement(); 
         CHtmlSelect select = new CHtmlSelect(); 
         select.name = "SlectForm"; 
         select.multiple = ""; 
         String values[] = {"naying", "wanfei"}; 
         select.values = values; select.search = "na"; 
         out.println(select); //出错提示行 
    %>
    不知道LZ是不是没有写这些name,values,multiple 属性,还是没有把这些属性给贴出来
      

  5.   

    没贴出来 应为太长了 只贴了关键的代码 其它的均是不影响编译的 我就没贴了完整代码如下:package test;public class CHtmlElement implements Cloneable
    {
    public Object clone()
    {
    Object o = null;

    try {
    o = super.clone();
    } catch (CloneNotSupportedException e) {
    System.out.println("Catch Exception On CHtmlElement cloneing");
    e.printStackTrace();
    }

    return o;
    }

    public static StringBuffer getProper(String member, String name)
    {
    StringBuffer str = new StringBuffer("");

    if (member != null)
    {
    str.append(" " + name + "=\"");
    str.append(member);
    str.append("\"");
    }

    return str;
    }

    public String getHead()
    {
    return "";
    }

    public String getMid()
    {
    return "";
    }

    public String getEnd()
    {
    return "";
    }

    public String toString()
    {
    return getHead() + getMid() + getEnd() + "212";
    }

    public static void main (String argv[])
    {
    System.out.println("CHtmlElement");
    }
    }
      

  6.   


    package test;public class CHtmlSelect extends CHtmlElement
    {
    public String name = null; //name是此列表框的名字。 
    public String multiple = null; //multiple属性不用赋值,直接加入标志中即可使用,加入了此属性后列表框就成了可多选的了;
    public String size = null; //size属性用来设置列表的高度,缺省时值为1
    public String with = null; //宽度
    public String [] values = null; //存列表项
    public String search = null; //存匹配内存 public void SetSearch(String str)
    {
    search = str;
    }

    public void SetValues(String[] strarray)
    {
    values = strarray;
    }

    public String getHead()
    {
    StringBuffer str = new StringBuffer("");
    str.append("<select");
    str.append(getProper(name, "name"));
    str.append(getProper(size, "size"));
    str.append(getProper(with, "with"));
    if (multiple != null)
    str.append(" multiple");
    str.append(">\n");

    return str.toString();
    }

    public boolean AllReplace(StringBuffer source, String oldString, String newString)
    {
    int start = 0, end = 0;
    while (true)
    {
    start = source.indexOf(oldString);
    if (start == -1) break;
    end = start + oldString.length();
    source.replace(start, end, newString);
    }
    return true;
    }

    public String getMid()
    {
    StringBuffer str = new StringBuffer("");
    String line = new String("\t<option value=\"?\">?\n");

    if (values != null)
    {
    for (int i = 0; i < values.length; i++)
    {
    if (search == null || search == "" || find(values[i], search))
    {
    StringBuffer tmp = new StringBuffer(line);
    AllReplace(tmp, "?", values[i]);
    str.append(tmp);
    }
    }
    }
    return str.toString();
    }

    public String getEnd()
    {
    return "</select>\n";
    }


    public boolean find(String source, String str)
    {
    if (source.indexOf(str) != -1)
    return true;
    return false;
    }

    public CHtmlSelect()
    {
    }

    public static void main (String argv[])
    {
    CHtmlSelect select = new CHtmlSelect();
    select.name = "SlectForm";
    select.multiple = "";
    String values[] = {"naying", "wanfei"};
    select.values = values;
    select.search = "na";
    System.out.println(select);
    }
    }
      

  7.   

    classpath的配置为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib\servlet-api.jar;%CATALINA_HOME%\lib\ojdbc14.jar;%CATALINA_HOME%\lib;%JAVA_HOME%\lib;%CATALINA_HOME%\lib\xalan.jar;%CATALINA_HOME%\webapps\jsp\WEB-INF\classes\test%CATALINA_HOME%\webapps\jsp\WEB-INF\classes\test就是CHtmlSelect的路径服务重启过 效果一样
      

  8.   

    你的main方法可以测试通过吗??
      

  9.   

    使用网上下载的jwhich找CHtmlSelect是能找到的
    public class jwhich {/**
    * 根据当前的classpath设置,
    * 显示出包含指定类的类文件所在
    * 位置的绝对路径
    *
    * @param className <类的名字>
    */
    public static void which(String className) { if (!className.startsWith("/")) {
    className = "/" + className;
    } className = className.replace('.', '/');
    className = className + ".class"; java.net.URL classUrl =
    new jwhich().getClass().getResource(className); if (classUrl != null) {
    System.out.println("\nClass '" + className +
    "' found in \n'" + classUrl.getFile() + "'");
    } else {
    System.out.println("\nClass '" + className +
    "' not found in \n'" +
    System.getProperty("java.class.path") + "'");
    }
    } public static void main(String args[]) {
    if (args.length > 0) {
    jwhich.which(args[0]);
    } else {
    System.err.println("Usage: java jwhich ");
    }
    }
    }
      

  10.   

    我把%CATALINA_HOME%\webapps\jsp\WEB-INF\classes\test 换成 %CATALINA_HOME%\webapps\jsp\WEB-INF\classes 发现还是不行现在在命令行中无论在什么地方执行java test.CHtmlElement都能正常显示
    但是在jsp页面里面总是报执行时找不到类
      

  11.   

    换了个环境变量,提示变了javax.servlet.ServletException: java.lang.NoClassDefFoundError: CHtmlSelect
    现在干脆是找不到CHtmlSelect了 - -!