Mam instalację Weblogic 10.3.3 i wydaje mi się, że mam problemy z rekurencyjnymi tagami JSP. W Internecie znalazłem kilka osób doświadczających tych samych problemów (here i here), ale bez rozwiązań. Niektórzy sugerują, że został on naprawiony w Weblogic 12 lub działał w 9, ale nie mogę tego potwierdzić.Weblogic i rekursywne tagi JSP
Aplikacja jest zbudowana przy użyciu Spring/Spring Roo/Apache Tiles/jspx. Klasa model, który jest wyświetlany jest coś takiego:
public class Programme {
private String name;
private final List<Programme> programmes = new ArrayList<Programme>();
...(getter/setter)...
}
Wtedy mam Tagx tak:
<jsp:root xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:coursedataimport="urn:jsptagdir:/WEB-INF/tags/coursedataimport" version="2.0">
<jsp:output omit-xml-declaration="yes" />
<jsp:directive.attribute name="programme" type="package.Programme" required="true" rtexprvalue="true" />
<c:out value="${programme.name}" />
<ul>
<c:forEach var="p" items="${programme.programmes}">
<li><coursedataimport:programme programme="${p}" /></li>
</c:forEach>
</ul>
</jsp:root>
To nie działa. Podczas żądania strony kontener aplikacji wydaje się ulegać awarii (prawdopodobnie niektóre przepełnienie stosu, ale nie mogę go znaleźć w dziennikach), a kontekst aplikacji jest przeładowywany. W Tomcat 7 działa dobrze.
Wyjątkiem pokazany jest coś takiego, ale nie jestem pewien, czy jest to związane (ponieważ mówi o stronę błędu):
[ServletContext @ 483389576 [app: app-ear-0 moduł : appmodule path:/CONTEXTROOT spec-version: 2.5]] Wystąpił problem podczas wyświetlania strony błędu. org.springframework.web.util.NestedServletException: Przetwarzanie żądania nie powiodło się; Zagnieżdżony wyjątek to java.lang.ClassCastException: org.apache.tiles.ArrayStack pod adresem org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:894) pod adresem org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:779) w javax.servlet.http.HttpServlet.service (HttpServlet.java:707) w javax.servlet.http.HttpServlet.service (HttpServlet.java:821) w ...
Czy ktoś wcześniej doświadczył tych problemów, czy ktoś jest świadomy naprawy? Wszelkie wskazówki dotyczące debugowania tego lub sposób obejścia rekursywnego tagu (ponieważ chcę wyświetlić drzewo, jest to trochę wyzwanie). Z góry dziękuję.
Czy próbujesz wywoływać rekursywnie znacznik programu? Mam podobny problem. Podczas wywoływania rekurencyjnie pliku znacznika działa on w Tomcat 6, ale nie w Weblogic 11. –
Tak, to jest problem. Tomcat działa dobrze, ale Weblogic to pita. Nigdy nie znaleźliśmy rozwiązania tego problemu, z wyjątkiem przepisywania kodu, aby nie używać tagu rekursywnego. – MikeN