2009-04-11 6 views
0

Ich bin die Schaffung einer Website, auf der viele Seiten Komponenten gibt, die sich auf Objekte beziehen, die in der Seite an anderer Stelle verwendet werden. Einige dieser Komponenten werden auch in anderen Seiten verwendet, daher beinhaltet mein Wunsch zu verwenden eher Cut-and-Paste.jsp useBean Umfang in enthalten Seite Komponenten

Das Problem ist, dass, wenn ich gleich „jsp: useBean“ habe in mehreren Komponenten auf der Seite Anweisungen, der Compiler den Fehler „doppelten lokalen Variable“ gibt.

Wie kann ich die gleichen Objekte in mehreren Komponenten einer JSP-Seite verwenden, ohne alles in der Datei zu haben?

Beispiel: in der Haupt (Eltern) Seite:

<jsp:useBean id="fred" class="..." scope="request" /> 

<jsp:directive.include file="myWidget.jsp" /> 

die eingeschlossene Seite, myWidget.jsp, muss auch die Verwendung des "fred" Objekt machen:

<jsp:useBean id="fred" class="..." scope="request" /> 

jedoch Dies führt dazu, dass die Kompilierung mit "doppelte lokale Variable 'fred'" fehlschlägt.

besiegt Diese im Grunde die Idee, eine Seite des Habens in Komponenten aufgebrochen; Ich möchte keine JSP-Dateien haben, die Hunderte von Zeilen lang sind, die sich nur geringfügig voneinander unterscheiden!

Für eine Komponente, wo es unbedingt notwendig ist, dass es auf jeder Seite der Website konsistent sein, ich habe, um das Problem mit einem scriptlet gearbeitet:

<% 
    { // for scope 
     Object _o1 = request.getAttribute("fred"); 
     if (_o1 !=null && _o1 instanceof MyClass) 
     { 
      // use a deliberately obscure variable name to avoid conflict 
      MyClass _myLocalFred1 = (MyClass) _o1; 

     } 
    } // for scope 
%> 

Dies funktioniert, aber es ist hässlich; Mehrere Bücher sagen "benutze niemals Scriptlets", aber Scriptlets scheinen die einzige Methode zu sein, bei der der Variablenumfang kontrolliert werden kann, und ich kann Namen verwenden, ohne sich Sorgen zu machen, dass sie an anderer Stelle auf der Seite verwendet werden.

Wie verwendet man jsp: useBean in einer INCLUDE-Datei?

+0

JSP wurde nie für "Widget" -Stil-Programmierung entwickelt. Sun weiß das und sie sind nach JSF umgezogen. Haben Sie erwogen, JSF anstelle von reiner JSP zu verwenden? Jedes andere Web-Framework wird auch tun, was Sie wollen. – kazanaki

Antwort

0

Ich landete die „Tiles“ Teil des Struts-Framework. Es sorgt für die Isolierung von Komponenten, sodass sie den Namensraum der anderen nicht beeinträchtigen.