Ich schreibe viele JSP-Seiten für verschiedene Ansichten. Diese JSP rufen Anforderungsbereichsattribute ab, die sehr lange Namen haben, um eine Überlappung zu vermeiden. Ein Beispiel ist:Attribute Benennungskonvention, die zu langen EL-Ausdrücken in JSP führt Seite
request.getAttribute("domain1.subdomain1.subdomain11.subdomain111.attributeName");
Equivalent in EL wäre:
${requestScope['domain1.subdomain1.subdomain11.subdomain111.attributeName']}
Manchmal mein EL Ausdrücke sehr lang ist (zum Beispiel, wenn ich 3 verschiedenen Java Beans verwenden, um einen HTML-Tag oder rufen Sie Javascript-Funktion erstellen).
Meine Frage ist, ob die Lösung, die ich gefunden habe, eine gute Programmierlösung ist. In Anbetracht der Tatsache, dass jede Ansicht seiner eigenen Seite Umfang hat, am Anfang meiner JSP, möchte ich
<c:set var="attributeName" scope="page" value="${requestScope['domain1.subdomain1.subdomain11.subdomain111.attributeName']}"
Und dann in meiner EL Ausdrücke setzen, werde ich verwenden
${pageScope["attributeName"]}
Ist das nicht Dies führt zu Verwirrung über den tatsächlichen Umfang des Attributs beim Lesen des JSP-Codes.
Auch wenn Sie dies implementieren, wird dies eine Verletzung des Demeter-Gesetzes sein. Ist es nicht möglich, jsp-Komponenten für "subdomain111" zu entwickeln und diese Komponenten für eine "subdomain11" -jsp-Komponente zu verbinden? – SpaceTrucker
Das wäre eine sehr gute Lösung, aber die Namenskonvention der Attribute ist außerhalb meiner Reichweite. Die Anforderung durchläuft viele Schritte, bevor die JSP erreicht wird, und es gibt sogar Filter, die die Anforderung nach der JSP mit einigen Attributen verarbeiten. Ich kann die Namensattribute in der Anfrage nicht ändern. Ich habe nicht einmal meine Hand auf verschiedenen Controllern, die einige Attribute setzen –
Es sollte '$ {pageScope [attributeName]}' (ohne die Anführungszeichen) sein. –