On Apr 18, 2008, at 4/189:56 AM , Jan Vissers wrote:
I think I'm getting a bit further now - sorry to spam this list by the
way...
If I pass the breadCrumb model in the Component class instead via the
Component Template something is happening.
So instead of:
<t:heading t:id="heading"
t:breadCrumbs="${basePage.breadCrumbHolder.model}" />
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Using the default @Parameter, this should just be:
t:breadCrumbs="basePage.breadCrumbHolder.model".
Default binding type is "prop", so the ${} bit is unneeded.
If your loop is in a form, then you should pass "volatile=true".
Cheers,
Robert
I do in .java
@Component(inheritInformalParameters = true, parameters =
{ "loginPage
=inherit:loginPage","breadCrumbs=basePage.breadCrumbHolder.model" })
On Fri, 2008-04-18 at 16:47 +0200, Jan Vissers wrote:
The layout component that passes in the 'breadCrumb' model to the
'heading' component which should render the breadcrumbs...
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
<meta http-equiv="Content-Type"
content="text/html;charset=utf-8" />
<link rel="shortcut icon" href="favicon.ico" />
<title>${title}</title>
</head>
<body>
<div id="container">
<t:branding t:id="branding" />
<t:heading t:id="heading"
t:breadCrumbs="${basePage.breadCrumbHolder.model}" />
<t:body />
<t:copyright t:id="copyright" />
</div>
</body>
</html>
On Fri, 2008-04-18 at 16:43 +0200, Chris Lewis wrote:
And that is the part I want to see, from the template code which you
still haven't shared ;-). What I'm referring to is your .tml file
where
you use this component.
Jan Vissers wrote:
In the snippet below if I change:
public List<BreadcrumbBean> getBreadCrumbs()
and let it return a freshly created list. The loop construct works.
However via the @Parameter (passing it it) doesn't.
-J.
On Fri, 2008-04-18 at 16:27 +0200, Jan Vissers wrote:
Here it is:
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.tapestry.annotations.Parameter;
import com.philips.lighting.guidecontrol.view.BreadcrumbBean;
/**
* The heading component holds the following pieces of Heading
information.
*
* <pre>
* <div id="heading">
* <ul id="breadcrumbs">
* <li
id="prefix">[ &aposyou-are-here&apos ]>/
li>
* { when loginPage }
* <li>&aposlogin-page&apos</li>
* { when not loginPage }
* { for all crumbs }
* { if crumb is last }
* <li>[ crumb text ]</li>
* { if crumb is not last }
* <li><a href="[ crumb
link ]">[ crumb text ]</a> > </li>
* </ul>
* </div>
* </pre>
*
* @author Cumquat Information Technology
*
*/
public class Heading {
private static final Logger logger =
Logger.getLogger(Heading.class);
@Parameter
private boolean loginPage = false;
@Parameter
private List<BreadcrumbBean> breadCrumbs;
private int index;
private BreadcrumbBean crumb;
public boolean isLoginPage() {
return loginPage;
}
public List<BreadcrumbBean> getBreadCrumbs() {
return breadCrumbs;
}
public void setBreadCrumbs(List<BreadcrumbBean> breadCrumbs) {
logger.debug("Setting breadcrumbs: "+breadCrumbs);
this.breadCrumbs = breadCrumbs;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public BreadcrumbBean getCrumb() {
return crumb;
}
public void setCrumb(BreadcrumbBean crumb) {
this.crumb = crumb;
}
public boolean isLastCrumb() {
return (index == breadCrumbs.size() - 1);
}
}
On Fri, 2008-04-18 at 16:22 +0200, Chris Lewis wrote:
We still haven't seen your template code, where you declare this
component and pass it the model. I can't be sure but perhaps it
will
shed some light...
Jan Vissers wrote:
The problem is somehow related to the way my page and
component are
hooked up/working.
For testing purposes I now create the Breadcrumb list in the
component
itself, simply returning a created list on the fly whenever
getBreadCrumbs() is called. This works as expected!!!
Strange thing is that via passing the 'model' to the component
via a
page binding the same thing doesn't work. This must be a bug?!
-J.
On Fri, 2008-04-18 at 15:59 +0200, Chris Lewis wrote:
That looks good to me. I don't have an example I can look at
with a
loop, but I do have one with a t:grid in which I reference a
bean
property of a custom class. It's possible that the two are
vastly
different, but I wouldn't think that.
Jan Vissers wrote:
On the component I have:
@Parameter
private List<BreadcrumbBean> breadCrumbs;
This is passed in via the containg (base)page.
And in the same component class I have:
private BreadcrumbBean crumb;
public BreadcrumbBean getCrumb() {
return crumb;
}
public void setCrumb(BreadcrumbBean crumb) {
this.crumb = crumb;
}
This should be right, right?
-J.
On Fri, 2008-04-18 at 14:00 +0100, nicholas Krul wrote:
? is your crumb property of type BreadCrumbBean, or is it
type String?
should be same as breadCrumbs<?TYPE>
On Fri, Apr 18, 2008 at 1:56 PM, Chris Lewis <[EMAIL PROTECTED]
>
wrote:
I can't speak about your t:if bit because I don't know
what "LastCrumb"
would be, but assuming that your page class has getters/
setters (or the
property is annotated with @Property) for the "crumb"
property, a getter
for your "breadCrumbs," and your crumb bean defines a
"getName" method,
you *should* be good.
It would be helpful if you can include the exception,
specifically the
line it references, etc.
chris
PS the list is good, the IRC channel (irc.freenode.net
#tapestry) is
better ;-)
Jan Vissers wrote:
Yep, sure, I may I add - This mailing list is great and
Tapestry rocks!
<t:loop source="breadCrumbs" value="crumb" index="index">
<t:if test="LastCrumb">
${crumb.name}
<t:parameter name="else">
<a href="#"
t:type="pageLink" ....>${crumb.name}</a>
</t:parameter>
</t:if>
</t:loop>
-J.
On Fri, 2008-04-18 at 14:34 +0200, Chris Lewis wrote:
Can you share some code? At least the relevant part from
template would
be helpful.
chris
Jan Vissers wrote:
Hi,
Just to make sure I'm not missing something.
In T4 when I wrote a @For construct I could use
value="..." as long as
I
provided a setter|getter pair for the class involved -
in this case
BreadcrumbBean. I want to iterate over a list of beans
and use each
instance individually. Now T5 throws up on me with this
nice coercion
message. Does this mean I need to contribute my own
coercion - or is
there a more simple way? In my case BreadcrumbBean is a
simple class
holding three String members.
Thanks (again :-))
-J.
---------------------------------------------------------------------
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]
--
http://thegodcode.net
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: users-
[EMAIL PROTECTED]
---------------------------------------------------------------------
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]
---------------------------------------------------------------------
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]
---------------------------------------------------------------------
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]