2013-01-17 30 views
5

Javascript ve css dosyalarını yüklemek için joker karakterler kullanıyorum ve harika çalışıyor, ancak geliştirme aşamasında toplu javascript dosyalarıyla çalışmak için bir acı. Wro4j'nin dosyaları bir araya getirmemesinin bir yolu var mı, sadece bunları tek tek dahil et?wro4j - Hata ayıklama modunda toplama özelliğini nasıl devre dışı bırakırsınız?

Benim wro.xml Dosya

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

teşekkürler!

cevap

4

Geliştirme modunda bunu gerçekleştirmek için bir numara var (debug=true). Bir son nokta var (/wro/wroAPI/model - bu, WroFilter'i /wro/* ile eşleştiriyorsanız geçerlidir), bu modelin JSON temsilini döndürür. Bu JSON'u kullanarak, grup girişlerini yineleyerek belirli bir grup için komut dosyalarını ve/veya css bağlantılarını kolayca ekleyebilirsiniz. Varsayılan olarak henüz mevcut bir widget yoktur, ancak bir tane oluşturursanız ve katkıda bulunmak istiyorsanız - rica ederim :).

2

Giriş için teşekkürler, Alex.

Yukarıda verdiğiniz bilgileri kullanan bir ServletFilter oluşturdum. Buraya posterity için gönderiyorum. Not: Bu ideal kod değildir (örneğin, çok fazla önbellek), sadece burada bir uygulamanın nasıl görüneceğine dair bir fikir vermek için burada. Uygulamam, hangi grupların endişelenmesi gerektiğini koduna bildirmek için Spring'in DelegatingFilterProxy kullanıyor. Bir eklenti oluşturmaya gelince, bana uygulama için bazı belgelerin yolunu çizebilir misin, ben bu bölümde puslu muyum?

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 dosya

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

ve ....

Bahar Yapılandırma

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