[SPRING] 재귀 thymeleaf 사용하여 메뉴를 렌더링하는 방법
SPRING재귀 thymeleaf 사용하여 메뉴를 렌더링하는 방법
나는 UL / 리튬 목록을 사용하여 HTML 메뉴를 렌더링하고 싶습니다. 나는이 클래스 구조를 가지고있다 :
public class MenuItem {
private String name;
private MenuItem parent;
private List<MenuItem> children;
public MenuItem(String name,List<MenuItem> children) {
this.name = name;
this.children = children;
for (MenuItem child : children) {
child.parent = this;
}
}
public MenuItem(String name) {
this.name = name;
}
public String getName() {
return name;
}
public MenuItem getParent() {
return parent;
}
public List<MenuItem> getChildren() {
return children;
}
}
당신이 볼 수 있듯이 그것은 일반적인 트리 구조는 하나 개의 루트 요소는 자식에 대한 참조를 포함하고 등등 그들의 참조하고 있고,입니다.
지금은이 같은 구조를 렌더링하는 사랑 :
<ul>
<li>Item 1
<ul>
<li>Item 1.1</li>
<li>Item 1.2
<ul>
<li>Item 1.2.1</li>
<li>Item 1.2.3</li>
</ul>
</li>
<li>Item 1.3</li>
</ul>
</li>
<li>Item 2</li>
</ul>
나는 thymeleaf에 어떻게 그렇게 할 수 있습니까? 나는 타일, 레이아웃 또는 다른 어떤 같은 다른 기술을 사용하는 경우 쉽게입니다.
편집 : 매개 변수가 대체하지만 운 / 포함했습니다. 통과 매개 변수 문자열로 변환하고, 재귀의 또 다른 수준에 사용할 수 없습니다. https://github.com/ultraq/thymeleaf-layout-dialect/issues/12 참조
대단히 감사합니다,
솔직한
해결법
-
==============================
1.이 시도:
이 시도:
menuFragment.html로 하나의 메뉴 항목에 대한 조각 만들기
<html> <section layout:fragment="menu"> <ul> <li th:each="menuItem : ${menuItemsList}" th:text="${menuItem.name}"> <section layout:include="@{path/to/folder/menuFragment} :: menu" th:with="menuItemsList=${menuItem.children}"></section> </li> </ul> </section> </html>
메뉴 파일의 조각 등을 포함
<section layout:include="@{path/to/folder/menuFragment} :: menu" th:with="menuItemsList=${rootMenuItemAsList}"></section>
rootMenuItemAsList은 상위 메뉴 목록입니다
이 도움말 당신은 것입니다 희망
-
==============================
2.나는 이것을 시도하고 선 나에게 보인다
나는 이것을 시도하고 선 나에게 보인다
<li th:each="menuItem : ${menuItemsList}" th:text="${menuItem.name}"> <section layout:include="@{path/to/folder/menuFragment} :: menu" th:with="menuItemsList=${menuItem.children}"></section>
텍스트 속성 정확하게는 않습니다 : 리 블록 내부의 내용을 덮어 일이 있기 때문에 - (가) (태그 리 안에)를 포함 덮어 쓰게됩니다.
나는이 다음과 같은 작업을 할 수있어 :
<li th:each="menuItem : ${menuItemsList}"> <span th:text="${menuItem.name}">prototype text...</span> <section layout:include="@{path/to/folder/menuFragment} :: menu" th:with="menuItemsList=${menuItem.children}"></section> </li>
도움이 되었기를 바랍니다...
-
==============================
3.내 주에서 나는 다음과 같습니다 :
내 주에서 나는 다음과 같습니다 :
<section th:include="@{categoryFragment} :: category" th:with="maincategories=${categories}"></section>
그리고 조각으로 내가 사용 :
<section th:fragment="category"> <ul> <li th:each="cat : ${maincategories}"> <span th:text="${cat.categoryName}">Main Cat</span> <section th:include="@{categoryFragment} :: category" th:with="maincategories=${cat.getChildren()}"></section> </li> </ul> </section>
이것은 나를 위해 절대적으로 잘 작동합니다.
from https://stackoverflow.com/questions/25032838/how-to-render-menu-using-thymeleaf-recursively by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 자바 - 봄 WS -로드 상대는 XSD 파일에 포함 (톰캣 8) (0) | 2019.10.21 |
---|---|
[SPRING] 봄은``유형의 하나 이상의 콩이있다, autowire가 없습니다 (0) | 2019.10.19 |
[SPRING] 파라미터 화 된 형태를 선택할 수 없습니다 (0) | 2019.10.18 |
[SPRING] 자신감 문서에 대한 문자열에 @ApiModelProperty 데이터 유형을 설정하는 방법 (0) | 2019.10.18 |
[SPRING] 테스트 케이스로부터 제어기를 호출 할 때 자동 유선 컴포넌트와 제어기를 테스트하면 널 (0) | 2019.10.18 |