>From: "Andrew Robinson" <[EMAIL PROTECTED]> >Looks like something dying to be in the WIKI Gary :) >
Not a bad idea. I'll see what I can do. >-Andrew > Gary On Jan 23, 2008 10:28 AM, Gary VanMatre <[EMAIL PROTECTED]> wrote: >From: Samba <[EMAIL PROTECTED]> >Hi all, > I'm building a couple of custom components based on trinidad core, more like > adding some >enhancements... > > I would like to know if Trinidad expose any API to be used by Coustom > components to load our >own JavaScript, CSS , and Images. > You can plug in a custom script loaders into a web application that already uses trinidad. Trinidad uses a resource servlet. At startup, the resource servlet scanns the class path for META-INF/services/resources/{url-pattern}.resources. These files define resource loaders. Steps: 1) Create a trinidad resource loader by extending RegexResourceLoader. <code> /** * <p>This is a composite resource loader that hooks into the * <code>ResourceServlet</code>. * <pre> * <servlet> * <servlet-name>resources</servlet-name> * <servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet * </servlet-class> * </servlet> * </pre><br/><br/> * * It is registered by placing a text file under * the "/META-INF/servlets/resources" folder. The name of the file must * begin with the url folder prefix registered in the web deployment * descriptor (web.xml) and the suffix should be ".resources". * * <pre> *<servlet-mapping> * <servlet-name>resources</servlet-name> ; & nbsp;* <url-pattern>/acme/*</url-pattern> *</servlet-mapping> * </pre><br/><br/> * * The folder prefix needs to correspond to the formulation of various * web resources. * *<pre> * #{facesContext.externalContext.requestContextPath}/acme/images/folder.gif} *</pre> * * * */ public class AcmeResourceLoader extends RegexResourceLoader { public AcmeResourceLoader() { // any resource in "/acme/" with the following suffixes will be // loaded from the base folder of "META-INF". // The servlet pattern match "/acme/*" should exist under "META-INF". // For example URL : context-root/acme/images/type1.gif // map to: META-INF/acme/images/type1.gif register("(/.*\\.(jpg|gif|png|jpeg))", new ClassLoaderResourceLoader("META-INF")); // associate pattern match on the "/acme/all-acme.js" to deliver // all JS files bundled by the AcmeScriptsResourceLoader register("(/.*all-acme.js)", new AcmeScriptsResourceLoader("/acme/all- acme.js")); } /** * <p>Aggregates all JavaScript files into a single stream identified * by a single URI. All JavaScripts for the acme custom component library * will be delivered using a single script include. * * <pre> * <script type="text/javascript" * scr="#{facesContext.externalContext.requestContextPath}/acme/all-acme.js" * /> * </pre> * <br/> * -- or -- * <pre> * <trh:script source="/acme/all-acme.js"/> * </pre> * </p> */ public static class AcmeScriptsResourceLoader extends AggregatingResourceLoader { /** * <p>The URI used to identify all of the JavaScripts that will be * included using a single URI.</p> * * @param scriptsURI the URI relative to "/acme/*" */ public AcmeScriptsResourceLoader(String scriptsURI) { // pass the base folder and list of script files. // the script files have to be within the classpath super(scriptsURI, _LIBRARIES, new ClassLoaderResourceLoader()); this.setSeparator(AcmeScriptsResourceLoader._NEWLINE_SEPARATOR); } /** * <p>List of all JavaScript files to include. The Peer JS * file should always be registered last for a component * grouping if the peeer is registered with the component * in the peer JS file.</p> */ static private final String[] _LIBRARIES = { "oracle/adfdemo/acme/js/component/AcmeTagPane.js", "oracle/adfdemo/acme/js/event/AcmeTagSelectEvent.js", "oracle/adfdemo/acme/js/component/AcmeTagPanePeer.js" }; /** * <p>The separator to use in between streams.</p> */ static private final String _NEWLINE_SEPARATOR = "\n"; } } </code> 2) Create a simple registration file (META-INF/services/resources/acme.resources) in the jar or web project containing the fully qualifed path to the resource loader. <code> oracle.adfdemo.acme.faces.resource.AcmeResourceLoader </code> 3) Add the resource servlet mappings to your web deployment descriptor (web.xml). <code> <servlet-mapping> <servlet-name>resources</servlet-name> <url-pattern>/acme/*</url-pattern> </servlet-mapping> </code> 4) Include the script in the jsp page. <code> <trh:head> <trh:script source="/acme/all-acme.js"/> </trh:head> </code> >Any help in this regard is highly appreciated, >Thanking you all, >Samba Gary