Unable to embed swf movie using mediaOutput
alan79 Jul 9, 2009 7:29 AMHi Forum
I'm trying to embed a swf movie using the mediaOutput (as described in the demo). But I can't get it to work.. It just happens nothing.
I added the request scope beans MediaBean and MediaData.
This my page:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://java.sun.com/jsp/jstl/core"
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:t="http://myfaces.apache.org/tomahawk"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<f:view>
<ui:composition
template="#{facesContext.externalContext.requestContextPath}/../layout/layout.xhtml">
<ui:define name="contentNav">
<t:div id="leftContentNavigation">
</t:div>
</ui:define>
<ui:define name="contentComponents">
<t:div id="leftContentComponents">
</t:div>
</ui:define>
<ui:define name="title">
<h:outputText value="#{cont.windowTitleHelp }" />
</ui:define>
<ui:define name="content">
<f:verbatim>
<script type="text/javascript"
src="#{facesContext.externalContext.requestContextPath}/scripts/swfobject.js" />
<script type="text/javascript">
var flashvars = {};
var params = {};
var attributes = {};
swfobject.embedSWF(#{rich:element('swfLink')}.href, "#{rich:clientId('myFlashContent')}", "200", "200", "9.0.0", false, flashvars, params, attributes);
</script>
<a4j:outputPanel id="flashPanelDynamic">
<a4j:mediaOutput element="a" id="swfLink" style="display: none;" cacheable="false" session="true"
createContent="#{mediaBean.paintFlash}" value="#{mediaData}" />
<a4j:outputPanel layout="block" id="myFlashContent" style="width: 200px; height: 200px">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
</a4j:outputPanel>
</a4j:outputPanel>
</f:verbatim>
</ui:define>
</ui:composition>
</f:view>
</html>
The Beans:
package com.antavis.groupware.handler;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
public class MediaBean {
public MediaBean(){
System.out.println("*** DEBUG MEDIA BEAN INITIATED...");
}
public void paint(OutputStream out, Object data) throws IOException{
if (data instanceof MediaData) {
MediaData paintData = (MediaData) data;
BufferedImage img = new BufferedImage(paintData.getWidth(),paintData.getHeight(),BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = img.createGraphics();
graphics2D.setBackground(paintData.getBackground());
graphics2D.setColor(paintData.getDrawColor());
graphics2D.clearRect(0,0,paintData.getWidth(),paintData.getHeight());
graphics2D.drawLine(5,5,paintData.getWidth()-5,paintData.getHeight()-5);
graphics2D.drawChars(new String("RichFaces").toCharArray(),0,9,40,15);
graphics2D.drawChars(new String("mediaOutput").toCharArray(),0,11,5,45);
ImageIO.write(img,"jpeg",out);
}
}
private void copy(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[2048];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
}
public void paintFlash(OutputStream out, Object data) throws IOException {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader == null) {
loader = getClass().getClassLoader();
}
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("../../scripts/create_time_report.swf");
if (stream != null) {
try {
copy(stream, out);
} finally {
stream.close();
}
}
else{
System.out.println("*** DEBUG MOVIE - STREAM NULL...");
}
}
}
package com.antavis.groupware.handler;
import java.awt.Color;
import java.io.Serializable;
public class MediaData implements Serializable{
private static final long serialVersionUID = 1L;
Integer Width=110;
Integer Height=50;
Color Background=new Color(0,0,0);
Color DrawColor=new Color(255,255,255);
public MediaData() {
}
public Color getBackground() {
return Background;
}
public void setBackground(Color background) {
Background = background;
}
public Color getDrawColor() {
return DrawColor;
}
public void setDrawColor(Color drawColor) {
DrawColor = drawColor;
}
public Integer getHeight() {
return Height;
}
public void setHeight(Integer height) {
Height = height;
}
public Integer getWidth() {
return Width;
}
public void setWidth(Integer width) {
Width = width;
}
}
It seems like the MediaBean class is never initiated.. What am I doing wrong?
Thank you very much for a hint!
Best regards
Alan