2017-03-14 5 views
0

Mojarra 2.2.13을 사용 중이며 내 프로젝트는 PrimeFaces 6.0을 사용합니다.addComponentResource를 사용하여 JSF 리소스 (JavaScript)를 렌더링하지 않았습니다.

저는 자체 JSF UIComponent을 쓰고 있습니다. webapp/resources/js/charts.min.js에 약간의 JavaScript가 있어야합니다. 내가 @ResourceDependency 스크립트 렌더링 입니다 사용하여 내 구성 요소에 주석을 달 때 :

@ResourceDependency(name = "js/charts.min.js", target = "head") 

을, 나는 항상 렌더링 할 필요가 없습니다. 그래서 조건부 encodeBegin(FacesContext context) 방법 내에서보기 루트에 구성 요소 리소스를 추가하려고했다 :

if (condition) { 
    UIOutput js = new UIOutput(); 
    js.setRendererType("javax.faces.resource.Script"); 
    js.getAttributes().put("name", "js/charts.min.js"); 
    context.getViewRoot().addComponentResource(context, js, "head"); 

    writer.startElement("div", null); 
    writer.writeAttribute("class", "myChart", null); 
    // ... write chart data 
    writer.endElement("div"); 
} 

하지 스크립트 렌더링 않습니다 (myChart것은 비록 렌더링입니다). 로그에 오류가 표시되지 않습니다. 내가 점검하거나 개선 할 수있는 아이디어가 있습니까?

PrimeFaces 없이도 테스트했는데 (헤드 렌더러가이 문제를 일으키는 지 확실하지 않음) 결과는 동일합니다.

+0

당신은 시도해 봤어 JSTL 태그 대신 자바 코드 설정? –

+0

@ TheBitman no. UIComponent를 만들 때 어떻게 도움이됩니까? –

+0

JSF 파일에서 컴포넌트 대신 js 링크를 필터링 할 수 있다고 생각했습니다. 하지만 전 완전히 당신의 질문을 이해하지 못한다는 사실을 말해주세요 :) –

답변

0

따라서 encodeBegin(FacesContext context)은 자원을 추가하는 올바른 위치가 아닙니다. 너는 너무 늦었다.

코드를 구성 요소의 생성자로 이동 했으므로 이제 스크립트가 추가되었습니다. 나는 100 % 아니지만 이렇게 할 수있는 가장 좋은 위치입니다.하지만 생성자에서도 구성 요소 라이브러리를 사용하고있는 것을 보았습니다. 또한 PrimeFaces와 함께 작동합니다.

은 참조 :