Sure, go ahead. But just to be clear, this code probably won't work "as is". That's just the basics I put together based on an implementation I had made so there might be some details that may need filling in or fixing.
For instance, below is an e-mail I sent Calvin answering some questions about this implementation. I did a reply-to-all but I don't think it made it to this list. Anyway, here it is. >1. public class ImageService implements IEngineService { > > public ILink getLink(boolean isPost, Object parameters) { > Object personId = parameterArray[0]; Where does the > parameterArray come from? That's my mistake. You can cast "parameters" into an Object array and use that. >2. OutputStream outputStream = webResponse.getOutputStream(contentType); > I get a Cannot make a static reference to the non-static method >>getOutputStream(ContentType) from the type WebResponse That's because you're actually calling WebResponse.getOutputStream... you need to get an instance of webResponse, you can do that with: WebResponse webResponse = cycle.getInfrastructure().getResponse(); As I said, I sent you the basic structure... you might have to fill in some things to get it 100% working. >3. Where does the following code go: >// This is the hivemind service being injected >@InjectObject("service:ImageService") > > public String getImageLink() { > Object[] parameters = new Object[1]; ... This code goes on you page/component class. Whatever page or component in which you wish to display the image. Denis -----Original Message----- From: Sven Homburg [mailto:[EMAIL PROTECTED] Sent: quinta-feira, 9 de março de 2006 16:16 To: Tapestry users Subject: Re: Database Images 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] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]