|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.myfaces.custom.dojoaddresource.DojoAddResource
public class DojoAddResource
This is a utility class to render link to resources used by custom components. Mostly used to avoid having to include [script src="..."][/script] in the head of the pages before using a component.
The special URL format is:
{contextPath}/faces/myFacesExtensionResource/ {resourceLoaderName}/{cacheKey}/{resourceURI}Where:
Nested Class Summary | |
---|---|
protected static interface |
DojoAddResource.PositionedInfo
|
protected static interface |
DojoAddResource.WritablePositionedInfo
|
Field Summary | |
---|---|
protected java.lang.String |
_contextPath
|
protected static org.apache.commons.logging.Log |
log
|
protected static org.apache.commons.logging.Log |
logSend
|
Fields inherited from interface org.apache.myfaces.renderkit.html.util.AddResource |
---|
BODY_END, BODY_ONLOAD, HEADER_BEGIN |
Constructor Summary | |
---|---|
DojoAddResource()
|
Method Summary | |
---|---|
void |
addInlineScriptAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.String inlineScript)
Adds the given Inline Script at the specified document position. |
void |
addInlineStyleAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.String inlineStyle)
Adds the given Inline Style at the specified document position. |
void |
addJavaScriptAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.Class myfacesCustomComponent,
java.lang.String resourceName)
Insert a [script src="url"] entry into the document header at the specified document position. |
void |
addJavaScriptAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.Class myfacesCustomComponent,
java.lang.String resourceName,
boolean defer)
Insert a [script src="url"] entry into the document header at the specified document position. |
void |
addJavaScriptAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
Adds the given Javascript resource to the document header at the specified document positioy by supplying a resourcehandler instance. |
void |
addJavaScriptAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler,
boolean defer)
Adds the given Javascript resource at the specified document position. |
void |
addJavaScriptAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.String uri)
Insert a [script src="url"] entry into the document header at the specified document position. |
void |
addJavaScriptAtPosition(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.String uri,
boolean defer)
Adds the given Javascript resource at the specified document position. |
void |
addJavaScriptAtPositionPlain(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.Class myfacesCustomComponent,
java.lang.String resourceName)
|
void |
addJavaScriptHere(javax.faces.context.FacesContext context,
java.lang.Class myfacesCustomComponent,
java.lang.String resourceName)
Insert a [script src="url"] entry at the current location in the response. |
void |
addJavaScriptHere(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
Insert a [script src="url"] entry at the current location in the response. |
void |
addJavaScriptHere(javax.faces.context.FacesContext context,
java.lang.String uri)
Insert a [script src="url"] entry at the current location in the response. |
void |
addJavaScriptHerePlain(javax.faces.context.FacesContext context,
java.lang.String uri)
|
void |
addJavaScriptToBodyTag(javax.faces.context.FacesContext context,
java.lang.String javascriptEventName,
java.lang.String addedJavaScript)
|
void |
addResourceHere(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
|
void |
addStyleSheet(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.Class myfacesCustomComponent,
java.lang.String resourceName)
Adds the given Style Sheet at the specified document position. |
void |
addStyleSheet(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
Adds the given Style Sheet at the specified document position. |
void |
addStyleSheet(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourcePosition position,
java.lang.String uri)
Adds the given Style Sheet at the specified document position. |
protected java.lang.String |
getAbsoluteUri(javax.faces.context.FacesContext context,
java.lang.String uri)
|
protected long |
getCacheKey(javax.faces.context.FacesContext context)
Return a value used in the {cacheKey} part of a generated URL for a resource reference. |
protected java.lang.String |
getResourceUri(javax.faces.context.FacesContext context,
java.lang.Class resourceLoader,
boolean withContextPath)
Get the Path used to retrieve an resource. |
java.lang.String |
getResourceUri(javax.faces.context.FacesContext context,
java.lang.Class myfacesCustomComponent,
java.lang.String resource)
|
java.lang.String |
getResourceUri(javax.faces.context.FacesContext context,
java.lang.Class myfacesCustomComponent,
java.lang.String resource,
boolean withContextPath)
|
java.lang.String |
getResourceUri(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
Get the Path used to retrieve an resource. |
java.lang.String |
getResourceUri(javax.faces.context.FacesContext context,
org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler,
boolean withContextPath)
Get the Path used to retrieve an resource. |
java.lang.String |
getResourceUri(javax.faces.context.FacesContext context,
java.lang.String uri)
Get the Path used to retrieve an resource. |
java.lang.String |
getResourceUri(javax.faces.context.FacesContext context,
java.lang.String uri,
boolean withContextPath)
Get the Path used to retrieve an resource. |
protected DojoAddResource.PositionedInfo |
getScriptInstance(javax.faces.context.FacesContext context,
java.lang.String uri,
boolean defer)
|
boolean |
hasHeaderBeginInfos()
|
boolean |
hasHeaderBeginInfos(javax.servlet.http.HttpServletRequest request)
|
boolean |
isResourceUri(javax.servlet.ServletContext servletContext,
javax.servlet.http.HttpServletRequest request)
|
void |
parseResponse(javax.servlet.http.HttpServletRequest request,
java.lang.String bufferedResponse,
javax.servlet.http.HttpServletResponse response)
Parses the response to mark the positions where code will be inserted |
boolean |
requiresBuffer()
|
void |
responseFinished()
|
void |
responseStarted()
|
protected void |
sendError(javax.servlet.http.HttpServletResponse response,
int errorCode,
java.lang.String errorText)
|
void |
serveResource(javax.servlet.ServletContext context,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
|
void |
setContextPath(java.lang.String contextPath)
|
protected void |
validateResourceHandler(org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
Verify that the resource handler is acceptable. |
protected void |
validateResourceLoader(java.lang.Class resourceloader)
Given a Class object, verify that the instances of that class implement the ResourceLoader interface. |
void |
writeMyFacesJavascriptBeforeBodyEnd(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Writes the javascript code necessary for myfaces in every page, just befode the closing </body> tag |
void |
writeResponse(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Writes the response |
void |
writeWithFullHeader(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Add the resources to the <head> of the page. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static final org.apache.commons.logging.Log log
protected static final org.apache.commons.logging.Log logSend
protected java.lang.String _contextPath
Constructor Detail |
---|
public DojoAddResource()
Method Detail |
---|
public void setContextPath(java.lang.String contextPath)
setContextPath
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addJavaScriptHere(javax.faces.context.FacesContext context, java.lang.Class myfacesCustomComponent, java.lang.String resourceName) throws java.io.IOException
Example: when customComponent is class example.Widget, and resourceName is script.js, the resource will be retrieved from "example/Widget/resource/script.js" in the classpath.
addJavaScriptHere
in interface org.apache.myfaces.renderkit.html.util.AddResource
java.io.IOException
public void addJavaScriptHere(javax.faces.context.FacesContext context, java.lang.String uri) throws java.io.IOException
addJavaScriptHere
in interface org.apache.myfaces.renderkit.html.util.AddResource
uri
- is the location of the desired resource, relative to the base
directory of the webapp (ie its contextPath).
java.io.IOException
public void addJavaScriptHerePlain(javax.faces.context.FacesContext context, java.lang.String uri) throws java.io.IOException
addJavaScriptHerePlain
in interface org.apache.myfaces.renderkit.html.util.AddResource
java.io.IOException
public void addJavaScriptHere(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler) throws java.io.IOException
addJavaScriptHere
in interface org.apache.myfaces.renderkit.html.util.AddResource
context
- resourceHandler
- is an object which specifies exactly how to build the url
that is emitted into the script tag. Code which needs to generate URLs in ways
that this class does not support by default can implement a custom ResourceHandler.
java.io.IOException
public void addResourceHere(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler) throws java.io.IOException
addResourceHere
in interface org.apache.myfaces.renderkit.html.util.AddResource
java.io.IOException
protected void validateResourceHandler(org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
resourceHandler
- protected void validateResourceLoader(java.lang.Class resourceloader)
resourceloader
- public void addJavaScriptAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
Use this method to have full control about building the reference url to identify the resource and to customize how the resource is written to the response. In most cases, however, one of the convenience methods on this class can be used without requiring a custom ResourceHandler to be provided.
If the script has already been referenced, it's added only once.
Note that this method queues the javascript for insertion, and that the script is inserted into the buffered response by the ExtensionsFilter after the page is complete.
addJavaScriptAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addJavaScriptAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.Class myfacesCustomComponent, java.lang.String resourceName)
The resource is expected to be in the classpath, at the same location as the specified component + "/resource".
Example: when customComponent is class example.Widget, and resourceName is script.js, the resource will be retrieved from "example/Widget/resource/script.js" in the classpath.
addJavaScriptAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addJavaScriptAtPositionPlain(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.Class myfacesCustomComponent, java.lang.String resourceName)
addJavaScriptAtPositionPlain
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addJavaScriptAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.Class myfacesCustomComponent, java.lang.String resourceName, boolean defer)
addJavaScriptAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
defer
- specifies whether the html attribute "defer" is set on the
generated script tag. If this is true then the browser will continue
processing the html page without waiting for the specified script to
load and be run.public void addJavaScriptAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.String uri)
addJavaScriptAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
uri
- is the location of the desired resource, relative to the base
directory of the webapp (ie its contextPath).public void addJavaScriptAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.String uri, boolean defer)
addJavaScriptAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addJavaScriptToBodyTag(javax.faces.context.FacesContext context, java.lang.String javascriptEventName, java.lang.String addedJavaScript)
addJavaScriptToBodyTag
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addJavaScriptAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler, boolean defer)
addJavaScriptAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addStyleSheet(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.Class myfacesCustomComponent, java.lang.String resourceName)
addStyleSheet
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addStyleSheet(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.String uri)
addStyleSheet
in interface org.apache.myfaces.renderkit.html.util.AddResource
protected java.lang.String getAbsoluteUri(javax.faces.context.FacesContext context, java.lang.String uri)
public void addStyleSheet(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
addStyleSheet
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addInlineStyleAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.String inlineStyle)
addInlineStyleAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void addInlineScriptAtPosition(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourcePosition position, java.lang.String inlineScript)
addInlineScriptAtPosition
in interface org.apache.myfaces.renderkit.html.util.AddResource
public java.lang.String getResourceUri(javax.faces.context.FacesContext context, java.lang.Class myfacesCustomComponent, java.lang.String resource, boolean withContextPath)
getResourceUri
in interface org.apache.myfaces.renderkit.html.util.AddResource
public java.lang.String getResourceUri(javax.faces.context.FacesContext context, java.lang.Class myfacesCustomComponent, java.lang.String resource)
getResourceUri
in interface org.apache.myfaces.renderkit.html.util.AddResource
public java.lang.String getResourceUri(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler)
getResourceUri
in interface org.apache.myfaces.renderkit.html.util.AddResource
public java.lang.String getResourceUri(javax.faces.context.FacesContext context, org.apache.myfaces.renderkit.html.util.ResourceHandler resourceHandler, boolean withContextPath)
getResourceUri
in interface org.apache.myfaces.renderkit.html.util.AddResource
public java.lang.String getResourceUri(javax.faces.context.FacesContext context, java.lang.String uri)
getResourceUri
in interface org.apache.myfaces.renderkit.html.util.AddResource
public java.lang.String getResourceUri(javax.faces.context.FacesContext context, java.lang.String uri, boolean withContextPath)
getResourceUri
in interface org.apache.myfaces.renderkit.html.util.AddResource
protected java.lang.String getResourceUri(javax.faces.context.FacesContext context, java.lang.Class resourceLoader, boolean withContextPath)
protected long getCacheKey(javax.faces.context.FacesContext context)
Caching in browsers normally works by having files served to them include last-modified and expiry-time http headers. Until the expiry time is reached, a browser will silently use its cached version. After the expiry time, it will send a "get if modified since {time}" message, where {time} is the last-modified header from the version it has cached.
Unfortunately this scheme only works well for resources represented as plain files on disk, where the webserver can easily and efficiently see the last-modified time of the resource file. When that query has to be processed by a servlet that doesn't scale well, even when it is possible to determine the resource's last-modified date from servlet code.
Fortunately, for the AddResource class a static resource is only ever accessed because a URL was embedded by this class in a dynamic page. This makes it possible to implement caching by instead marking every resource served with a very long expiry time, but forcing the URL that points to the resource to change whenever the old cached version becomes invalid; the browser effectively thinks it is fetching a different resource that it hasn't seen before. This is implemented by embedding a "cache key" in the generated URL.
Rather than using the actual modification date of a resource as the cache key, we simply use the webapp deployment time. This means that all data cached by browsers will become invalid after a webapp deploy (all the urls to the resources change). It also means that changes that occur to a resource without a webapp redeploy will not be seen by browsers.
public boolean isResourceUri(javax.servlet.ServletContext servletContext, javax.servlet.http.HttpServletRequest request)
isResourceUri
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void serveResource(javax.servlet.ServletContext context, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.io.IOException
serveResource
in interface org.apache.myfaces.renderkit.html.util.AddResource
java.io.IOException
protected void sendError(javax.servlet.http.HttpServletResponse response, int errorCode, java.lang.String errorText) throws java.io.IOException
java.io.IOException
public boolean hasHeaderBeginInfos(javax.servlet.http.HttpServletRequest request)
public void parseResponse(javax.servlet.http.HttpServletRequest request, java.lang.String bufferedResponse, javax.servlet.http.HttpServletResponse response)
parseResponse
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void writeMyFacesJavascriptBeforeBodyEnd(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.io.IOException
writeMyFacesJavascriptBeforeBodyEnd
in interface org.apache.myfaces.renderkit.html.util.AddResource
java.io.IOException
public void writeWithFullHeader(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.io.IOException
writeWithFullHeader
in interface org.apache.myfaces.renderkit.html.util.AddResource
java.io.IOException
public void writeResponse(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.io.IOException
writeResponse
in interface org.apache.myfaces.renderkit.html.util.AddResource
java.io.IOException
protected DojoAddResource.PositionedInfo getScriptInstance(javax.faces.context.FacesContext context, java.lang.String uri, boolean defer)
public boolean requiresBuffer()
requiresBuffer
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void responseStarted()
responseStarted
in interface org.apache.myfaces.renderkit.html.util.AddResource
public void responseFinished()
responseFinished
in interface org.apache.myfaces.renderkit.html.util.AddResource
public boolean hasHeaderBeginInfos()
hasHeaderBeginInfos
in interface org.apache.myfaces.renderkit.html.util.AddResource
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |