私はJSFとPrimeFacesを使用しました。誰かがMenuItemをクリックしたときに起動するActionListenerがあります。
@Override
public void processAction(ActionEvent event) throws AbortProcessingException
{
Resource resouce = getResources().get(0);
try
{
ResourceDelegate delegate = new ResourceDelegate(resouce, configDao);
JSFUtils.writeToOutputStream(Mime.getMimeTypeForFileType(FileUtilities.getExtension(resouce.getName())), delegate.getData());
}
catch(Exception e)
{
logger.log(Level.SEVERE, "Cant show resource",e);
}
}
そのメニュー項目で、次のコードを使用して画像のデータをリクエストストリームに書き込みます。
/**
* Writes binary data to the response for the browser to display
* @param contentType
* @param data
* @throws IOException
*/
public static void writeToOutputStream(String contentType, byte[] data) throws IOException
{
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse hsr = getHttpServletResponse();
hsr.setContentType(contentType);
OutputStream stream = hsr.getOutputStream();
stream.write(data);
//Tell JSF to skip the remaining phases of the lifecycle
context.responseComplete();
}
ActionListenerが完了すると、画像が表示されると思いますが、そうではありません。何も起こりません。画像を正しく表示するために他に何かする必要がありますか?