Hi guys!
I need your help once more!
I have the task: I need to preview the html pages in .xhtml page. My html pages use flash charts, so I need to be able to show flash with other content. Also this previews must be smaller than the original page.
I try to do it with : I could see the text, but no flash and image content. Could somebody say - where is the problem? And maybe I need to do it in another way?
Here is some code:
package no.sfront.clientadmin;
/**
* @author Elena Veretilo
*
*/
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.faces.context.FacesContext;
import org.richfaces.event.UploadEvent;
import org.richfaces.model.UploadItem;
public class HtmlFileUpload
{
private ArrayList<HtmlFile> files = new ArrayList<HtmlFile>();
private int uploadsAvailable = 1;
private boolean autoUpload = true;
private boolean useFlash = true;
public static HtmlFileUpload getInstance() {
FacesContext facesContext = FacesContext.getCurrentInstance();
return (HtmlFileUpload) facesContext.getApplication().getELResolver()
.getValue(facesContext.getELContext(), null, "htmlFileUpload");
}
public HtmlFileUpload() {
}
public void paint(OutputStream stream, Object object) throws IOException {
stream.write(getFiles().get((Integer)object).getData());
}
public void listener(UploadEvent event) throws Exception{
UploadItem item = event.getUploadItem();
HtmlFile file = new HtmlFile();
byte[] array = item.getData();
file.setLength(array.length);
file.setName(item.getFileName());
file.setData(item.getData());
files.add(file);
uploadsAvailable--;
}
public String clearUploadData() {
files.clear();
setUploadsAvailable(1);
return null;
}
public int getSize() {
if (getFiles().size() > 0)
return getFiles().size();
else
return 0;
}
public long getTimeStamp(){
return System.currentTimeMillis();
}
public ArrayList<HtmlFile> getFiles() {
return files;
}
public void setFiles(ArrayList<HtmlFile> files) {
this.files = files;
}
public int getUploadsAvailable() {
return uploadsAvailable;
}
public void setUploadsAvailable(int uploadsAvailable) {
this.uploadsAvailable = uploadsAvailable;
}
public boolean isAutoUpload() {
return autoUpload;
}
public void setAutoUpload(boolean autoUpload) {
this.autoUpload = autoUpload;
}
public boolean isUseFlash() {
return useFlash;
}
public void setUseFlash(boolean useFlash) {
this.useFlash = useFlash;
}
}
public void setName(String name) {
Name = name;
int extDot = name.lastIndexOf('.');
if(extDot > 0){
String extension = name.substring(extDot +1);
if("html".equals(extension)){
mime = "text/html";//"multipart/related";//"text/html";
} else if("mht".equals(extension)){
mime = "text/html";//"multipart/related";//"text/html";
} else if("xhtml".equals(extension)){
mime = "application/xhtml+xml";
} else {
mime = "application/x-shockwave-flash";
}
}
}
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:fc="http://www.fusioncharts.com"
xmlns:t="http://myfaces.apache.org/tomahawk"
template="template.xhtml">
<ui:define name="title">Client Admin Page</ui:define>
<ui:define name="content">
<style>
.top {
vertical-align: top;
}
.info {
height: 100%;
overflow: auto;
}
</style>
<h:form>
<h:panelGrid columns="1" rows="2" columnClasses="top,top">
<rich:fileUpload fileUploadListener="#{htmlFileUpload.listener}"
maxFilesQuantity="#{htmlFileUpload.uploadsAvailable}"
id="upload"
immediateUpload="#{htmlFileUpload.autoUpload}"
acceptedTypes="html,xhtml,mht" allowFlash="#{htmlFileUpload.useFlash}"
listHeight="70px">
<a4j:support event="onuploadcomplete" reRender="info" />
<a4j:support event="onclear" reRender="upload,info" action="#{htmlFileUpload.clearUploadData}"/>
</rich:fileUpload>
<h:panelGroup id="info">
<rich:panel bodyClass="info">
<f:facet name="header">
<h:outputText value="Uploaded Files Info" />
</f:facet>
<h:outputText value="No files currently uploaded"
rendered="#{htmlFileUpload.size==0}" />
<rich:dataGrid columns="1" value="#{htmlFileUpload.files}"
var="file" rowKeyVar="row">
<rich:panel>
<h:panelGrid columns="1">
<a4j:mediaOutput element="object" mimeType="#{file.mime}"
createContent="#{htmlFileUpload.paint}"
value="#{row}" cacheable="true">
<f:param value="#{htmlFileUpload.timeStamp}" name="time"/>
</a4j:mediaOutput>
</h:panelGrid>
</rich:panel>
</rich:dataGrid>
</rich:panel>
<rich:spacer height="2"/>
<br/>
<a4j:commandButton action="#{htmlFileUpload.clearUploadData}"
reRender="info, upload" value="Clear Uploaded Data"
rendered="#{htmlFileUpload.size>0}" />
</h:panelGroup>
</h:panelGrid>
</h:form>
</ui:define>
<ui:define name="return" />
When I use mime type "text/html" - I could see only text and for other content (images, swf ) I get next exceptions:
org.ajax4jsf.resource.ResourceNotFoundException: Resource not registered : org.ajax4jsf.resource.UserResource/c/n/-1082243251/FusionCharts/AngularGauge.swf
javax.faces.FacesException: Error decode resource data at org.ajax4jsf.resource.ResourceBuilderImpl.decrypt(ResourceBuilderImpl.java:627)
SEVERE: Servlet.service() for servlet Faces Servlet threw exception org.ajax4jsf.resource.ResourceNotFoundException: Resource not registered : org.ajax4jsf.resource.UserResource/c/n/-1082243251/css/stylesheet.css