我們使用的是使用Weblogic Workshop 10.3並在weblogic服務器10.3上運行的應用程序構建。我試圖使用<jsp:include>
遞歸調用jsp頁面來顯示數據樹。我遇到的問題是,大約3-4層後,頁面不再呈現。 JSP周圍的日誌語句包括在執行之後顯示行,但jsp從未實際包含。 jsp文件開始處的日誌語句表明jsp中沒有單一行到達該點。最大值<jsp:include>深度
2
A
回答
4
從技術上講,限制取決於servletcontainer make和可用堆內存。如果你太過分了,你會得到一個StackOverflowError
。爲了避免錯過它,請再次檢查特定於服務器的錯誤日誌。
我打得周圍使用下面的代碼片段:
test.jsp
:
<!DOCTYPE html>
<html lang="en">
<head>
<title>SO question 3440560</title>
</head>
<body>
<jsp:include page="include.jsp?count=${param.count}" />
</body>
</html>
include.jsp
:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:if test="${param.count > 0}">
<p>include ${param.count}</p>
<jsp:include page="include.jsp?count=${param.count - 1}" />
</c:if>
標準的Tomcat 6.0.24設置有64MB的默認最大堆內存開始〜200包括後出錯。
爲了解決這個問題,你希望有一個迭代包含而不是遞歸包含。 JSTL c:forEach
可能會對此有所幫助。
更新:我不知道有關的Weblogic,Tomcat的,但日誌錯誤輸出到不同的文件比標準輸出。至於深度,Weblogic可能是一個重量級服務器。在包含JSP之前,可能會有很多前面的方法調用。
如果迭代不是解決方案,那麼你唯一的度假村是tail recursion。基本上,將結果作爲方法參數傳遞,而不是依賴(等待)方法的返回值,這樣可以保存堆棧。很遺憾,使用普通的jsp:include
是不可能的。你想寫一個標籤文件和/或一個輔助類。
它的工作原理大體如下:
public void renderHTML(List<Node> nodes, StringBuilder output) {
output.append("<li>" + node.getContent() + "</li>");
for (Node node : nodes) {
if (node.hasChildren()) {
output.append("<ul>");
renderHTML(node.getChildren(), output);
output.append("</ul>");
}
}
}
0
也許你應該使用合適的樹組件(使用Javascript樹或標籤庫)???
相關問題
- 1. AutoMapper:最大圖的深度
- 2. 最大樹深度在Haskell
- 3. FETCH JOIN最大深度?
- 4. Python:最大遞歸深度
- 5. 瓶最大遞歸深度
- 6. 值<=最大
- 7. OpenNI 2設置最小/最大深度值
- 8. 深度優先搜索中的Python「RuntimeError:最大遞歸深度」
- 9. Tkinter - RuntimeError:超過最大遞歸深度
- 10. B型樹的最大深度
- 11. 超過Django最大遞歸深度
- 12. 查找二叉樹的最大深度
- 13. 角UI樹限制最大深度
- 14. getattr的最大遞歸深度誤差
- 15. Django教程最大深度遞歸
- 16. 處理最大遞歸深度超過
- 17. 尋找樹的最大深度
- 18. 最大遞歸深度錯誤?
- 19. 查找樹的最大深度
- 20. QuickSort - RuntimeError:超過最大遞歸深度
- 21. 如何處理最大遞歸深度?
- 22. Django RuntimeError:超過最大遞歸深度
- 23. 防止超過最大遞歸深度
- 24. Python:最大遞歸深度錯誤
- 25. 給定樹結構的最大深度
- 26. 超過最大遞歸深度 - Django
- 27. Python:超過最大遞歸深度
- 28. 錯誤:最大遞歸深度比較
- 29. 樹的最大深度,使用隊列
- 30. CRM 2011達到的最大深度
http://blogs.msdn.com/b/oldnewthing/archive/2007/03/01/1775759.aspx – kazanaki 2010-09-15 13:19:28
遞歸通常是一個不明智的解決方案。如果您有「樹」結構化數據,請考慮編寫和/或使用樹組件。 – DwB 2010-11-18 13:34:38