How to programmatically add JS and CSS resources to ?

前端 未结 2 1844
伪装坚强ぢ
伪装坚强ぢ 2020-12-01 17:23

I need to add programmatically JS and CSS resources to of JSF page. It isn\'t clear how to achieve this. Could someone give a hint or a kickoff e

相关标签:
2条回答
  • 2020-12-01 17:40

    That depends on where exactly you'd like to declare the resource. Normally, the only reason to programmatically declare them is that you've a custom UIComponent or Renderer which generates HTML code which in turn requires those JS and/or CSS resources. They are then to be declared by @ResourceDependency or @ResourceDependencies.

    @ResourceDependency(library="mylibrary", name="foo.css")
    public class FooComponentWithCSS extends UIComponentBase {
        // ...
    }
    
    @ResourceDependencies({
        @ResourceDependency(library="mylibrary", name="bar.css"),
        @ResourceDependency(library="mylibrary", name="bar.js")
    })
    public class BarComponentWithCSSandJS extends UIComponentBase {
        // ...
    }
    

    But if you really need to declare them elsewhere, such as in a backing bean method which is invoked before render response (otherwise it's simply too late), then you can do that by UIViewRoot#addComponentResource(). The component resource must be created as an UIOutput having a renderer type of javax.faces.resource.Script or javax.faces.resource.Stylesheet, to represent a fullworthy <h:outputScript> or <h:outputStylesheet> respectively. The library and name attributes can just be put in the attribute map.

    UIOutput css = new UIOutput();
    css.setRendererType("javax.faces.resource.Stylesheet");
    css.getAttributes().put("library", "mylibrary");
    css.getAttributes().put("name", "bar.css");
    
    UIOutput js = new UIOutput();
    js.setRendererType("javax.faces.resource.Script");
    js.getAttributes().put("library", "mylibrary");
    js.getAttributes().put("name", "bar.js");
    
    FacesContext context = FacesContext.getCurrentInstance();
    context.getViewRoot().addComponentResource(context, css, "head");
    context.getViewRoot().addComponentResource(context, js, "head");
    
    0 讨论(0)
  • 2020-12-01 18:04

    You can add a script and style resources to a page like this:

    var head = document.getElementsByTagName("head")[0];
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = "xxxx.js";
    head.appendChild(s);
    
    s = document.createElement("style");
    s.type = "text/css"
    s.src = "yyy.css";
    head.appendChild(s);
    

    Or, in function form:

    function addScript(path) {
        var head = document.getElementsByTagName("head")[0];
        var s = document.createElement("script");
        s.type = "text/javascript";
        s.src = path;
        head.appendChild(s);
    }
    
    function addCSSFile(path) {
        var head = document.getElementsByTagName("head")[0];
        var s = document.createElement("style");
        s.type = "text/css";
        s.src = path;
        head.appendChild(s);
    }
    
    0 讨论(0)
提交回复
热议问题