5

ワイルドカードを使用してjavascriptファイルとcssファイルをロードしていますが、これはうまく機能しますが、開発段階で集約されたjavascriptファイルを操作するのは面倒です。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

2 に答える 2

5

開発モードでそれを実現するためのトリックがあります ( debug=true)。モデルの JSON 表現を返すエンドポイントがあります ( /wro/wroAPI/model- これは、WroFilter を にマッピングしている場合に有効です)。/wro/*この JSON を使用すると、グループ エントリを繰り返すことで、特定のグループにスクリプトや css リンクを簡単に挿入できます。デフォルトで利用できるようなウィジェットはまだありませんが、ウィジェットを作成して貢献したい場合は、大歓迎です :)。

于 2013-01-18T09:16:21.197 に答える
3

入力してくれてありがとう、アレックス。

上記で提供した情報を使用するServletFilterを作成しました。後世のためにここに投稿します。注:これは理想的なコードではありません(たとえば、キャッシュが多すぎます)。これは、実装がどのようになるかを人々に理解させるためのものです。私の実装では、SpringDelegatingFilterProxyを使用して、どのグループを心配するかをコードに指示しています。プラグインの作成に関する限り、実装するためのドキュメントへの道を教えていただけますか?私はその部分でぼんやりしていますか?

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>
于 2013-01-18T18:08:19.477 に答える