popupPanel doesn't work properly with autosize and mediaoutput
scarpent Dec 9, 2014 10:31 AMThanks. It's more than just the header adding height.
Here's the markup:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<h:form style="margin: 0;">
<rich:popupPanel id="imageModalPanel" autosized="true"
minWidth="425" minHeight="500"
moveable="true" top="50"
show="#{instance.getCurrentPhotoId() != 0}"
domElementAttachment="parent">
<f:facet name="header">
<h:panelGroup styleClass="widget-details-section-header">
<div class="widget-details-section-header-left">
<h:outputText value="Photo: #{instance.name}"/>
</div>
</h:panelGroup>
</f:facet>
<f:facet name="controls">
<h:panelGroup>
<a:commandLink execute="@this" id="hideFullPhoto"
actionListener="#{instance.setCurrentPhotoId(0)}"
title="#{messages['close']}" styleClass="close-button-icon"
render="imageModalPanel"/>
</h:panelGroup>
</f:facet>
<a:mediaOutput id="fullPhoto" element="img"
createContent="#{imageLoader.paintImageFullPhoto}"
value="#{instance.currentPhotoId}"
styleClass="widget-photo">
<a:ajax event="click"
listener="#{instance.setCurrentPhotoId(0)}"
render="imageModalPanel"/>
</a:mediaOutput>
</rich:popupPanel>
</h:form>
(Weird. Could see it in editor but not in my reply. Edited to try XML...)
And paintImageFullPhoto ends up here:
public void paintImage(
final OutputStream out,
final Object data,
int imageWidth
) throws IOException {
if (null == data || !(data instanceof Long)) {
return;
}
final Long mediaId = (Long) data;
String photoPath = getPhotosPath(mediaId, imageWidth);
if (StringUtils.isNullOrEmpty(photoPath)) {
return;
}
byte[] content = null;
try {
content = getFileContents(photoPath);
} catch (FileNotFoundException e) {
LOG.error("Couldn't find photo from path: " + photoPath + "; " + e.getMessage());
} catch (IOException e) {
LOG.error("Error loading photo data for: " + photoPath + "; " + e.getMessage());
}
if (content != null) {
out.write(content);
}
}
And getFileContents is essentially:
String fileUrl = getPhotoServerUrlBackend() + filePath;
try {
URL urlPhotos = new URL(fileUrl);
content = getUrlContents( urlPhotos );
} catch (Exception e) {
LOG.info(
"Error getting content from url: " + fileUrl + " " + e.getMessage()
);
}
Not sure if you need more than that, and also note that I'm updating some old RF3.3.3 stuff so maybe I've missed something with those changes.