예를 들어, 나는 몇 가지 사용자 정의 UI 구성 요소, 일부는 일부는 일부는 일부는 Dojo
에 따라, jsTree
에 따라, jQuery UI
에 따라, jquery-min.js
에 의존 등을 만든커스텀 Facelets 컴포넌트가 사용하는 스크립트를 자동으로 구성하는 방법은 무엇입니까?
:
file1.xhtml
<script src="jquery-min.js"></script>
<script src="jquery-ui.js"></script>
<script src="jsTree.js"></script>
<my:tree> ... </my:tree>
file2.xhtml
<script src="jquery-min.js"></script>
<script src="jquery-ui.js"></script>
<script src="jquery-ui-dialog.js"></script>
<script src="jquery-ui-autocompletion.js"></script>
<my:autodialog> ... </my:autodialog>
file3.xhtml
<script src="jquery-min.js"></script>
<script src="dojo.js"></script>
<my:dojostuff> ... </my:dojostuff>
이 매우 불편, 내가 어떤 라이브러리에 의존하는 구성 요소를 알고 있고, 종속성의 종속성.
템플릿 파일에 모든 종속성을 넣으면 확실히 간단 해지지 만 휴대 전화에 너무 많은 스크립트와 메모리가로드됩니다.
그래서 "UIAutoOrganizedScriptsComponent"와 같은 것이 있습니까?
현재 요청에 사용 된 구성 요소로 채워진 종속성을 포함하는 요청 범위의 해시 세트와 같은 것을 사용해야합니까? 나는 < 스크립트 >를 주입 할 수있는
static ThreadLocal<HashSet> requestScopedDependencies;
static Map<String, URL> libraryURLs;
MyTreeComponent extends UIOutput {
// ...
dependencies = requestScopeDependencies.get();
dependencies.add("jstree");
}
또는, 어쩌면 구성 요소 DOM이 찾아 검색해야? 이렇게 :
MyTreeComponent extends UIOutput {
// ...
UIComponent scriptsContainer = getParent().getParent().getChildren()[2].getChildren()[3];
// search if scriptsContainer already included the script...
if (! included) {
scriptsContainer.addElement("<script>...");
}
}
음, 매우 서투른. 이 일을하는 우아한 해결책이 있습니까?