hi denis,
do you feel ok, if i insert this howto into the tapestry wiki ?
best regards
homburg Softwaretechnik
S.Homburg
21220 Seevetal / GERMANY
Fon: +49-4105-669746
Fax: +49-4105-668947
Denis Souza wrote:
Hi, what you're doing is trying to use a @Insert component to insert a blob
in your page. It will never work like that since Tapestry will actually try
to display the string representation of your blob (if you call
personImage.toString() you'll get exactly that "[EMAIL PROTECTED]").
You need something a bit more sophisticated. I've done exactly what you're
trying to do so I'll explain it to you. I won't past all my code since it's
very application-specific.
First you need to create a service that will produce the image contents, so
create a class for that. Something like this:
public class ImageService implements IEngineService {
public ILink getLink(boolean isPost, Object parameters) {
Object personId = parameterArray[0];
Map serviceParameters = new HashMap();
serviceParameters.put(ServiceConstants.SERVICE, getName());
serviceParameters.put(ServiceConstants.PARAMETER, new Object[] {
personId });
return linkFactory.constructLink(this, isPost, serviceParameters,
true);
}
public String getName() {
return "personImage";
}
public void service(IRequestCycle cycle) throws IOException {
// here you have to set the appropriate content type
// I'm assuming it's a jpeg image.
ContentType contentType = new ContentType("image/jpeg");
OutputStream outputStream = webResponse.getOutputStream(contentType);
Object[] parameters = linkFactory.extractListenerParameters(cycle);
Integer personId = (Integer) parameters[0];
// you have the ID, so here you do whatever you have to do
// to fetch the person object
Person person = whatever...
// then you have to write the image contents to the output stream.
int length = person.personImage.length();
outputStream.write(person.personImage.getBytes(0,length));
outputStream.close();
}
}
On the html page you'll have to use an img tag with the source being the
service you just created:
<img jwcid="@Any" src="ognl:imageLink"/>
On the component's java class you'll need something like:
// This is the hivemind service being injected
@InjectObject("service:ImageService")
public abstract IEngineService getProductImageService();
public String getImageLink() {
Object[] parameters = new Object[1];
// I'm assuming there is a "person" variable in page
// with the person object you want to display.
parameters[0] = person.personID;
return getProductImageService().getLink(false,
parameters).getAbsoluteURL();
}
... next you'll also have to tell hivemind about the service in your
hivemodule.xml
<service-point id="ImageService"
interface="org.apache.tapestry.engine.IEngineService">
<invoke-factory>
<construct class="my.package.ImageService">
<set-object property="linkFactory"
value="infrastructure:linkFactory"/>
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="tapestry.services.FactoryServices">
<service name="personImage" object="service:ImageService"/>
</contribution>
That's more or less how I did it. I think that's about it, but if I forgot
anything I guess the docs can fill in.
Denis
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: segunda-feira, 6 de março de 2006 17:22
To: tapestry-user@jakarta.apache.org
Subject: Database Images
I am still trying to figure out how to display jpg's stored in our oracle
database. I have a person class that has the following fields:
private String personID;
private String personName;
private Blob personImage;
I create a list of these perons as I return data from the database.
My HOME.page contains
<component id="personImage" type="Insert">
<binding name="value" value="currentPerson.personImage"/>
</component>
and my HOME.html has
<td><span img jwcid="personImage">Test image 3</span></td>
The page works though the browser but I get [EMAIL PROTECTED] retuned
in the html table(with different data after the @ )
I looked at the examples but, since I am new to this, they did not help.
Any suggestions.
Thanks
Calvin
--
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]