JSP include指令中的重复项

时间:2013-09-19 22:24:00

标签: jsp methods include multiple-instances

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

假设我有第一个文件命名 的 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 ......

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

1 个答案:

答案 0 :(得分:1)

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

此外,您在班级File0()内有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