Tôi đang cố gắng thực hiện tài nguyên của riêng mình. Số getInputStream -method không được gọi.
xử lý của tôi:
Tài nguyên riêngHandler để truyền hình ảnh từ DB
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);
}
}
thực hiện My nguồn:
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;
}
}
Trong tôi faces-config.xml:
<application>
<resource-handler>com.foo.bbb.ResourceHandlerWrapperImpl</resource-handler>
</application>
Trong JSF của tôi:
<h:graphicImage library="media_lib" name="66" width="50" />
Output trong html:
<img src="/foo/javax.faces.resource/66?ln=media_lib" width="50" />
Return từ getRequestPath: /foo/javax.faces.resource/66?ln=media_lib
MediaResource được gọi và khởi tạo, nhưng getInputStream không được gọi. FireBug hiển thị 404 trên url này (được gọi hai lần). Tôi hoàn toàn bối rối những gì tôi đang làm sai ở đây.
Cảm ơn
Jonny