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: [email protected]
> 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]