You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Toby Hobson <to...@btinternet.com> on 2008/05/01 14:53:11 UTC

T5 pagelink problem

I have a strange problem with the pagelink component. I am trying to navigate from the start page to the ViewPhoto page but I get an exception:

[ERROR] RequestExceptionHandler Processing of request failed withuncaught exception: Exception in methodcom.thc.web.pages.ViewPhoto.onActivate(java.lang.Long) (atViewPhoto.java:18), parameter #1: Coercion of images to typejava.lang.Long (via String --> Long) failed: For input string:"images"
org.apache.tapestry.runtime.ComponentEventException: Exception inmethod com.thc.web.pages.ViewPhoto.onActivate(java.lang.Long) (atViewPhoto.java:18), parameter #1: Coercion of images to typejava.lang.Long (via String --> Long) failed: For input string:"images"
    at org.apache.tapestry.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1021)
...

and

[ERROR] RequestExceptionHandler Processing of request failed withuncaught exception: Exception in methodcom.thc.web.pages.ViewPhoto.onActivate(java.lang.Long) (atViewPhoto.java:18), parameter #1: Coercion of styles to typejava.lang.Long (via String --> Long) failed: For input string:"styles"
org.apache.tapestry.runtime.ComponentEventException: Exception inmethod com.thc.web.pages.ViewPhoto.onActivate(java.lang.Long) (atViewPhoto.java:18), parameter #1: Coercion of styles to typejava.lang.Long (via String --> Long) failed: For input string:"styles"
    at org.apache.tapestry.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1021

I think it's because tapestry is interpreting the ref to styles/style and images/x.jpg (in layout.tml) as params to the onActivate method. Do I have to use a special tapestry tag for any hrefs in my templates? The page renders without any problems if I leave out the onActivate method.

Here's the relevant code

Start.tml:

<t:pagelink page="viewPhoto" context="currentPhoto.id">
<img alt="#" src="${currentPhoto.imageResource.resource}" width="64"height="64" />
</t:pagelink>

ViewPhoto.java:

package com.thc.web.pages;
... 
public class ViewPhoto {
    
    private Photo photo;
    
    @Inject
    private PhotoDao photoDao;
    
    private Long imageId;
    
    void onActivate(Long imageId) {
        this.imageId = imageId;
        photo = photoDao.findImageById(imageId);
    }
    
    Long onPassivate() { return imageId }
    
    public Photo getPhoto() {
        return photo;
    }

    public void setPhoto(Photo photo) {
        this.photo = photo;
    }

}

layout.tml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Blotterpad</title>
<link href="styles/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form action="#">
<div id="container">
    <div id="header">
  <t:pagelink page="start"><img alt="#" src="images/art_Logo.gif" width="269" height="92" /></t:pagelink></div>
  <div id="login"><a href="#"><img alt="#" src="images/btn_home.jpg" width="11" height="10" /></a> | <a href="#"><img alt="#" src="images/btn_contact.jpg" width="11" height="8" /></a></div>
    <div class="clear"></div>
    <div id="navcontainer">
    <div style="float:right;"><img alt="#" src="images/art_navbg_right.jpg" width="6" height="31" /></div>
      <div class="menutop">
        <ul id="cssdropdown">
          <li class="mainitems"><a t:type="pagelink" page="Start" href="#">Home</a></li>
          <li class="mainitems"><a t:type="pagelink" page="MyPhotos" href="#">My Photos</a></li>
          <li class="mainitems"><a t:type="pagelink" page="MyEditions" href="#">My Artwork</a></li>
          <li class="mainitems"><a t:type="pagelink" page="MyFavourites" href="#">My Favorites</a></li>
          <li class="mainitems"><a t:type="pagelink" page="Search" href="#">Search</a></li>
          <li class="mainitems"><a t:type="pagelink" page="MyAccount" href="#">MyAccount</a></li>
        </ul>
      </div>
    </div>
   
   <!-- content here -->
   <t:body />
   
  <div class="clear"></div>
  <div class="clear"></div>
  <div id="footer">
    <div id="navcontainer2">
        <ul id="navlist">
        <li><a href="#">Home</a></li>
        <li><a href="#">Registration</a></li>
        <li><a href="#">My Galleries</a></li>
        <li><a href="#">My Favourites</a></li>
        <li><a href="#">My Editions</a></li>
        <li><a href="#">My Account</a></li>
        <li><a href="#">View photo</a></li>
        <li style="border:0px!important;"><a href="#">Contact Us</a></li>
        </ul>
    </div>
<p style="padding:10px 0px;"><strong>Blotterpad</strong> 2007.All Rights reserved</p>
  </div>
</div>
</form>
</body>
</html>

The start page generates a link in the form http://myapp/viewphoto/1 as I would expect but when i click on the link i get the exception

Thanks!


Re: T5 pagelink problem

Posted by Bill Holloway <bi...@peoplepad.com>.
It sounds like currentPhoto.id is returning the string "images" and
"classes" rather than a Long.  Might want to check the return type and value
of the getId() method of your Photo class.  I'd be tempted to put a debug
breakpoint in getId() somewhere and watch the value being returned.

On Thu, May 1, 2008 at 7:53 AM, Toby Hobson <to...@btinternet.com>
wrote:

> I have a strange problem with the pagelink component. I am trying to
> navigate from the start page to the ViewPhoto page but I get an exception:
>
> [ERROR] RequestExceptionHandler Processing of request failed withuncaught
> exception: Exception in
> methodcom.thc.web.pages.ViewPhoto.onActivate(java.lang.Long)
> (atViewPhoto.java:18), parameter #1: Coercion of images to
> typejava.lang.Long (via String --> Long) failed: For input string:"images"
> org.apache.tapestry.runtime.ComponentEventException: Exception inmethod
> com.thc.web.pages.ViewPhoto.onActivate(java.lang.Long)
> (atViewPhoto.java:18), parameter #1: Coercion of images to
> typejava.lang.Long (via String --> Long) failed: For input string:"images"
>    at
> org.apache.tapestry.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1021)
> ...
>
> and
>
> [ERROR] RequestExceptionHandler Processing of request failed withuncaught
> exception: Exception in
> methodcom.thc.web.pages.ViewPhoto.onActivate(java.lang.Long)
> (atViewPhoto.java:18), parameter #1: Coercion of styles to
> typejava.lang.Long (via String --> Long) failed: For input string:"styles"
> org.apache.tapestry.runtime.ComponentEventException: Exception inmethod
> com.thc.web.pages.ViewPhoto.onActivate(java.lang.Long)
> (atViewPhoto.java:18), parameter #1: Coercion of styles to
> typejava.lang.Long (via String --> Long) failed: For input string:"styles"
>    at
> org.apache.tapestry.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1021
>
> I think it's because tapestry is interpreting the ref to styles/style and
> images/x.jpg (in layout.tml) as params to the onActivate method. Do I have
> to use a special tapestry tag for any hrefs in my templates? The page
> renders without any problems if I leave out the onActivate method.
>
> Here's the relevant code
>
> Start.tml:
>
> <t:pagelink page="viewPhoto" context="currentPhoto.id">
> <img alt="#" src="${currentPhoto.imageResource.resource}"
> width="64"height="64" />
> </t:pagelink>
>
> ViewPhoto.java:
>
> package com.thc.web.pages;
> ...
> public class ViewPhoto {
>
>    private Photo photo;
>
>    @Inject
>    private PhotoDao photoDao;
>
>    private Long imageId;
>
>    void onActivate(Long imageId) {
>        this.imageId = imageId;
>        photo = photoDao.findImageById(imageId);
>    }
>
>    Long onPassivate() { return imageId }
>
>    public Photo getPhoto() {
>        return photo;
>    }
>
>    public void setPhoto(Photo photo) {
>        this.photo = photo;
>    }
>
> }
>
> layout.tml
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
>   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
> <title>Blotterpad</title>
> <link href="styles/style.css" rel="stylesheet" type="text/css" />
> </head>
> <body>
> <form action="#">
> <div id="container">
>    <div id="header">
>  <t:pagelink page="start"><img alt="#" src="images/art_Logo.gif"
> width="269" height="92" /></t:pagelink></div>
>  <div id="login"><a href="#"><img alt="#" src="images/btn_home.jpg"
> width="11" height="10" /></a> | <a href="#"><img alt="#"
> src="images/btn_contact.jpg" width="11" height="8" /></a></div>
>    <div class="clear"></div>
>    <div id="navcontainer">
>    <div style="float:right;"><img alt="#" src="images/art_navbg_right.jpg"
> width="6" height="31" /></div>
>      <div class="menutop">
>        <ul id="cssdropdown">
>          <li class="mainitems"><a t:type="pagelink" page="Start"
> href="#">Home</a></li>
>          <li class="mainitems"><a t:type="pagelink" page="MyPhotos"
> href="#">My Photos</a></li>
>          <li class="mainitems"><a t:type="pagelink" page="MyEditions"
> href="#">My Artwork</a></li>
>          <li class="mainitems"><a t:type="pagelink" page="MyFavourites"
> href="#">My Favorites</a></li>
>          <li class="mainitems"><a t:type="pagelink" page="Search"
> href="#">Search</a></li>
>          <li class="mainitems"><a t:type="pagelink" page="MyAccount"
> href="#">MyAccount</a></li>
>        </ul>
>      </div>
>    </div>
>
>   <!-- content here -->
>   <t:body />
>
>  <div class="clear"></div>
>  <div class="clear"></div>
>  <div id="footer">
>    <div id="navcontainer2">
>        <ul id="navlist">
>        <li><a href="#">Home</a></li>
>        <li><a href="#">Registration</a></li>
>        <li><a href="#">My Galleries</a></li>
>        <li><a href="#">My Favourites</a></li>
>        <li><a href="#">My Editions</a></li>
>        <li><a href="#">My Account</a></li>
>        <li><a href="#">View photo</a></li>
>        <li style="border:0px!important;"><a href="#">Contact Us</a></li>
>        </ul>
>    </div>
> <p style="padding:10px 0px;"><strong>Blotterpad</strong> 2007.All Rights
> reserved</p>
>  </div>
> </div>
> </form>
> </body>
> </html>
>
> The start page generates a link in the form http://myapp/viewphoto/1 as I
> would expect but when i click on the link i get the exception
>
> Thanks!
>
>


-- 
Bill @ PeoplePad

Re: T5 pagelink problem

Posted by Szemere Szemere <sz...@googlemail.com>.
It is generally wise to have your links in the form:
${asset:context:styles/style.css}

Then the links will work even if you have parameters that change the
relative depth of the URL path.

Szemere