2013-01-17 15 views
5

Używam symboli wieloznacznych do ładowania plików javascript i css i działa świetnie, ale praca z zagregowanymi plikami javascript podczas fazy projektowania jest trudna. Czy istnieje sposób, aby wro4j nie agregował plików, ale po prostu uwzględnij je osobno?wro4j - Jak wyłączyć funkcję agregacji w trybie debugowania?

Moja wro.xml pliku

<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> 

Dzięki!

Odpowiedz

4

Istnieje pewna sztuczka do osiągnięcia tego w trybie programowania (debug=true). Istnieje punkt końcowy (/wro/wroAPI/model - jest to poprawne, jeśli mapujesz obiekt WroFilter na /wro/*), który zwraca reprezentację modelu JSON. Używając tego JSON, możesz łatwo wstawiać skrypty i/lub łącza css dla danej grupy przez iterowanie wpisów grupowych. Nie ma takiego widżetu, który jest jeszcze dostępny domyślnie, ale jeśli go stworzysz i chcesz go wnieść - nie ma za co :).

2

Dzięki za wiadomość, Alex.

Utworzono filtr ServletFilter, który korzysta z informacji podanych powyżej. Publikuję tutaj dla potomności. Uwaga: to nie jest idealny kod (na przykład zbyt wiele pamięci podręcznej), to tylko tutaj, aby dać ludziom pomysł, jak będzie wyglądać implementacja. Moja implementacja używa numeru DelegatingFilterProxy Springa, aby poinformować kod, o jakie grupy się martwić. Jeśli chodzi o tworzenie wtyczki, czy mógłbyś wskazać mi drogę do jakiejś dokumentacji do implementacji, jestem niejasny w tej części?

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; 
    } 
} 

Plik

<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> 

i ....

wiosną Konfiguracja wro.xml

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