2013-01-17 3 views
5

자바 스크립트와 CSS 파일을 로딩 할 때 와일드 카드를 사용하고 있습니다.하지만 개발 단계에서 집계 된 자바 스크립트 파일로 작업하는 것이 좋습니다. wro4j가 파일을 집계하지 않고 개별적으로 포함시키는 방법이 있습니까?wro4j - 디버그 모드에서 집계 기능을 어떻게 비활성화 하시겠습니까?

wro.xml 파일

<groups xmlns="http://www.isdc.ro/wro"> 
<group name="external"> 
    <js>/app/lib/*.js</js> 
</group> 

<group name="application"> 
    <js>/js/*.js</js> 
    <css>/css/normalize.css</css> 
    <css>/css/*.css</css> 
</group> 
</groups> 

감사합니다!

답변

4

개발 모드 (debug=true)에서이를 달성하는 트릭이 있습니다. 끝점 (/wro/wroAPI/model - WroFilter를 /wro/*으로 매핑하는 경우 유효 함)은 모델의 JSON 표현을 반환합니다. 이 JSON을 사용하면 그룹 항목을 반복하여 주어진 그룹에 대한 스크립트 및/또는 CSS 링크를 쉽게 삽입 할 수 있습니다. 기본적으로 아직 사용할 수있는 위젯은 없지만 작성한 후 기여하려면 - 환영합니다. :)

2

감사합니다. 알렉스.

위에서 제공 한 정보를 사용하는 ServletFilter를 만들었습니다. 나는 후손을 위해 여기에 게시합니다. 참고 : 이것은 이상적인 코드가 아닙니다 (캐시가 너무 많음). 예를 들어 구현이 어떻게 보이는지 아이디어를 제공하는 것입니다. 내 구현에서는 Spring의 DelegatingFilterProxy을 사용하여 걱정할 그룹을 코드에 알려줍니다. 지금까지는 플러그인을 만드는 것과 관련하여, 구현을위한 몇 가지 문서로가는 길을 가르쳐 주시겠습니까? 나는 그 부분에서 흐릿한가?

public class WroDebugFilter implements Filter 
{ 
    //http loader is shamelessly stolen from another project. 
    SimpleHttpLoader httpLoader = new SimpleHttpLoader(); 

    private List<String> jscriptFiles; 
    private List<String> debugGroups; 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

     request.setAttribute("jscriptFiles",getJavaScriptFiles((HttpServletRequest) request)); 

     chain.doFilter(request,response); 
    } 

    private List<String> getJavaScriptFiles(HttpServletRequest request) { 

     if (jscriptFiles == null) { 

      List<String> cssFiles = new ArrayList<String>(); 
      List<String> jsFiles = new ArrayList<String>(); 

      JsonParser jsonParser = new JsonParser(); 

      String url = httpLoader.httpGet(getApiUrl(request)); 

      JsonObject data = jsonParser.parse(url).getAsJsonObject(); 
      JsonArray groups = data.getAsJsonArray("groups"); 

      for (JsonElement group : groups) { 

       JsonObject groupObject = group.getAsJsonObject(); 

       String groupName = groupObject.get("name").getAsString(); 

       if (debugGroups.contains(groupName)) { 

        JsonArray resources = groupObject.getAsJsonArray("resources"); 

        for (JsonElement resource : resources) { 
         JsonObject resourceObject = resource.getAsJsonObject(); 
         String uri = resourceObject.get("uri").getAsString(); 

         if (uri.contains(".css")) { 
          cssFiles.add("\t<link rel=\"stylesheet\" href=\"" + request.getContextPath() + uri +"\">"); 
         } 
         else { 
          jsFiles.add("<script type=\"text/javascript\" src=\"" + request.getContextPath() + uri + "\"></script>"); 
         } 
        } 
       } 

      } 
      cssFiles.addAll(jsFiles); 
      jscriptFiles = cssFiles; 
     } 

     return jscriptFiles; 
    } 

    private String getApiUrl(HttpServletRequest request) { 

     String serverName = request.getServerName(); 
     String contextPath = request.getContextPath(); 
     int port = request.getServerPort(); 

     return String.format("http://%s:%s%s/%s",serverName,port,contextPath,"wro/wroAPI/model"); 
    } 

    @Override 
    public void destroy() { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    public List<String> getDebugGroups() { 
     return debugGroups; 
    } 

    public void setDebugGroups(List<String> debugGroups) { 
     this.debugGroups = debugGroups; 
    } 
} 

wro.xml 파일

<groups xmlns="http://www.isdc.ro/wro"> 
    <group name="external"> 
     <js>/app/lib/*.js</js> 
    </group> 

    <group name="application"> 
     <js>/js/*.js</js> 
     <css>/css/normalize.css</css> 
     <css>/css/*.css</css> 
    </group> 
</groups> 

하고 ....

봄 구성을

<bean id="wroDebugFilter" class="gov.mystate.dhw.idalink.web.filter.WroDebugFilter"> 
     <property name="debugGroups"> 
       <list> 
        <value>application</value> 
       </list> 
      </property> 
    </bean>