2013-01-17 8 views
5

मैं अपने जावास्क्रिप्ट और सीएसएस फ़ाइलों को लोड करने के लिए वाइल्डकार्ड का उपयोग कर रहा हूं और यह बहुत अच्छा काम करता है, लेकिन विकास चरण के दौरान समेकित जावास्क्रिप्ट फ़ाइलों के साथ काम करना दर्द होता है। क्या 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 का उपयोग करके, आप समूह प्रविष्टियों को पुनरावृत्त करके किसी दिए गए समूह के लिए आसानी से स्क्रिप्ट और/या सीएसएस लिंक डाल सकते हैं। डिफ़ॉल्ट रूप से अभी तक ऐसा कोई विजेट उपलब्ध नहीं है, लेकिन यदि आप एक बनाते हैं और इसे योगदान देना चाहते हैं - आपका स्वागत है :)।

2

इनपुट, एलेक्स के लिए धन्यवाद।

मैंने एक ServletFilter बनाया है जो ऊपर दी गई जानकारी का उपयोग करता है। मैं इसे यहां पोस्टरिटी के लिए पोस्ट करता हूं। नोट: यह आदर्श कोड नहीं है (उदाहरण के लिए कैश बहुत अधिक है), यह सिर्फ लोगों को यह विचार करने के लिए है कि एक कार्यान्वयन कैसा दिखता है। कोड के बारे में चिंता करने के लिए कोड को बताने के लिए मेरा कार्यान्वयन स्प्रिंग के 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> 
संबंधित मुद्दे