-1

此代码不是真实的,但更简单并显示问题

假设我有名为 Base.jsp的第一个文件

<%!
  class Base {
    public String Parm0 = "";
    public String Parm1 = "";

    Base () {
      PrintMessage("Base Created!!");
    }
  }
  javax.servlet.jsp.JspWriter Out;
  void SetJspWriter(javax.servlet.jsp.JspWriter out) {
    Out = out;
  }

  void PrintMessage(String Msg) {
    try {
      Out.print("<P style=\"color:rgb(255,0,0)\">"+Msg+"</P>");
    }
    catch (Exception e) {}
  }
%>

现在我有一个使用基本文件的第二个文件: Fil0.jsp

<%@ include file="Base.jsp" %>
<%!
  class File0 {
    public Base MyBase;
    File0 () {
      MyBase = new Base();
      PrintMessage("Based Used!!");
    }
  }
%>

现在我有一个使用基本文件的第三个文件: Fil1.jsp

<%@ include file="Base.jsp" %>
<%@ include file="Fil0.jsp" %>
<%!
  class File1 {
    public Base MyBase;
    public File0 MyFil0;
    File1 () {
      MyBase = new Base();
      MyFil0 = new File0();
      PrintMessage("Based and Fil0 Created!!");
    }
  }
%>
<%
  SetJspWriter(out);
  File1 MyFil1 = new File1();
%>

如您所见...此代码将产生如下消息:

重复字段 Fil1_jsp.Out

Fil1_jsp 类型中的重复方法 PrintMessage(String)

如何解决这个错误 在我需要在两个文件中包含 Base 之前:File0 和 File1。并且 File1 有 Base 和 File0 ...

编译器找到两个声明...

4

1 回答 1

1

尝试插入行:javax.servlet.jsp.JspWriter Out;仅在最后一个文件Fil1.jsp中,我认为使用包含您实际上不止一次声明同一个对象。

此外,您File0()在 class 中有构造函数File1

此外,由于您在 File0.jsp 中包含了 Base.jsp,然后在 File1.jsp 中包含了 Base.jsp 和 File0.jsp - 您实际上包含了两次 Base.jsp!

如果您想确切了解发生了什么,请查找已编译的 jsp:您的 jsp 文件已编译到.java并且通常可以在 tomcat/work文件夹下找到,在 linux 中类似于:/usr/local/tomcat/work/Catalina/localhost/_/org/apache/jsp

于 2013-09-19T22:39:10.613 回答