work unable style resource incluir images imagenes doesn and jsf-2 primefaces mojarra

jsf 2 - unable - Own ResourceHandler para transmitir imágenes de DB



outputstylesheet doesn t work (1)

encontré el error. El getRequestPath de mi implementación de recurso fue defectuoso. Olvidé la asignación de rostros ( Util.getFacesMapping (context) ) al servlet de rostros en la url:

@Override public String getRequestPath() { final FacesContext context = FacesContext.getCurrentInstance(); return context .getApplication() .getViewHandler() .getResourceURL( context, ResourceHandler.RESOURCE_IDENTIFIER + "/" + mediaId + Util.getFacesMapping(context) + "?ln=" + AppConstants.RESOURCE_MEDIA_LIB);

Todo funciona ahora como se espera.

Gracias a BalusC por su ayuda.

Aclamaciones
Jonny

Estoy luchando con mi propia implementación de recursos. El método getInputStream no se llama.

Mi controlador:

public class ResourceHandlerWrapperImpl extends ResourceHandlerWrapper { private final ResourceHandler wrapped; public ResourceHandlerWrapper(final ResourceHandler wrapped) { this.wrapped = wrapped; } @Override public ResourceHandler getWrapped() { return wrapped; } @Override public Resource createResource(final String resourceName, final String libraryName) { if (AppConstants.RESOURCE_MEDIA_LIB.equals(libraryName)) { return new MediaResource(resourceName); } else { return super.createResource(resourceName, libraryName); } } /** * @see javax.faces.application.ResourceHandlerWrapper#libraryExists(java.lang.String) */ @Override public boolean libraryExists(final String libraryName) { if (AppConstants.RESOURCE_MEDIA_LIB.equals(libraryName)) { return true; } else { return super.libraryExists(libraryName); } } /** * @see javax.faces.application.ResourceHandlerWrapper#isResourceRequest(javax.faces.context.FacesContext) */ @Override public boolean isResourceRequest(final FacesContext context) { return super.isResourceRequest(context); } }

Mi implementación de recursos:

public class MediaResource extends Resource { private final String mediaId; public MediaResource(final String mediaId) { setLibraryName(AppConstants.RESOURCE_MEDIA_LIB); setResourceName(mediaId); setContentType("image/png"); this.mediaId = mediaId; } @Override public InputStream getInputStream() throws IOException { if (mediaId != null) { System.out.println("Yeahhh!!!"); } return null; } @Override public Map<String, String> getResponseHeaders() { return new HashMap<String, String>(); } @Override public String getRequestPath() { final FacesContext context = FacesContext.getCurrentInstance(); return context .getApplication() .getViewHandler() .getResourceURL( context, ResourceHandler.RESOURCE_IDENTIFIER + "/" + mediaId + "?ln=" + AppConstants.RESOURCE_MEDIA_LIB); } @Override public URL getURL() { return null; } @Override public boolean userAgentNeedsUpdate(final FacesContext context) { return true; } }

En mi faces-config.xml:

<application> <resource-handler>com.foo.bbb.ResourceHandlerWrapperImpl</resource-handler> </application>

En mi jsf:

<h:graphicImage library="media_lib" name="66" width="50" />

Salida en html:

<img src="/foo/javax.faces.resource/66?ln=media_lib" width="50" />


Regreso de getRequestPath: /foo/javax.faces.resource/66?ln=media_lib

Se llama e inicializa MediaResource, pero no se llama al getInputStream. FireBug muestra un 404 en esta url (llamado dos veces). Estoy totalmente desconcertado por lo que estoy haciendo mal aquí.

Gracias
Jonny