You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "Robert A. Decker" <de...@robdecker.com> on 2007/10/04 01:27:26 UTC

simple Layout component

I'm trying to create the simple layout component described here:
http://tapestry.apache.org/tapestry5/tapestry-core/guide/templates.html
(I've also read the wiki info on components)

But I'm getting an exception:
java.lang.IllegalStateException
This markup writer does not have a current element. The current  
element is established with the first call to element() and is  
maintained across subsequent calls.


I've created Layout.html in the same location my Start.html file is at:

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
     <head>
         <title>Title</title>
     </head>
     <body>
         <t:body/>
     </body>
</html>


I've also created Layout.java in com.company.project.components:

package com.company.project.components;
public class Layout {

}


And I have a file name Main.html that the user is sent to after  
successfully logging in:

<t:layout xmlns:t="http://tapestry.apache.org/schema/ 
tapestry_5_0_0.xsd">

   Page Specific Content

</t:layout>




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: simple Layout component

Posted by Daniel Jue <te...@gmail.com>.
Yes, I it's recommended to have a pages/ and components/ directory.
You should really only have web.xml in your WEB-INF, but I guess
static html files can go there too.

YourApp/src/main/webapp/WEB-INF/ (web.xml)

YourApp/src/main/java/com/mycompany/myapp/base/  (java classes you
want your components or pages to extend/implement/use, but don't
access directly.)
YourApp/src/main/java/com/mycompany/myapp/components/  (java classes)
YourApp/src/main/java/com/mycompany/myapp/mixins/ (java classes)
YourApp/src/main/java/com/mycompany/myapp/pages/ (java classes)
YourApp/src/main/java/com/mycompany/myapp/services/ (java classes,
like AppModule)

(html files and locally referenced files like abc.properties or
resources for some components)
YourApp/src/main/resources/com/mycompany/myapp/components (html files)
YourApp/src/main/resources/com/mycompany/myapp/pages (html files)
YourApp/src/main/resources/com/mycompany/myapp/ (nothing)


To me, I added two more layers, and it just "feels" right...it even
feels enterprise-ish ;-)  :

YourApp/src/main/webapp/WEB-INF/ (web.xml)

YourApp/src/main/java/com/mycompany/myapp/accounts (packages regarding
logging in)
YourApp/src/main/java/com/mycompany/myapp/model
(charting,reporting,file generation packages)
YourApp/src/main/java/com/mycompany/myapp/wui/tapestry/base/  (java classes)
YourApp/src/main/java/com/mycompany/myapp/wui/tapestry/components/
(java classes)
YourApp/src/main/java/com/mycompany/myapp/wui/tapestry/mixins/ (java classes)
YourApp/src/main/java/com/mycompany/myapp/wui/tapestry/pages/ (java classes)
YourApp/src/main/java/com/mycompany/myapp/wui/tapestry/services/ (java classes)

(html files and locally referenced files like abc.properties or
resources for some components)
YourApp/src/main/resources/com/mycompany/myapp/wui/tapestry/components
(html files)
YourApp/src/main/resources/com/mycompany/myapp/wui/tapestry/pages (html files)
YourApp/src/main/resources/com/mycompany/myapp/wui/tapestry/ (nothing)

This way, if I want to switch to some other display framework, I can have
YourApp/src/main/resources/com/mycompany/myapp/wui/otherdisplayframework/

of if I want to someday do a swing version, I can do:
YourApp/src/main/resources/com/mycompany/myapp/gui/swing/

or if I want to expose some services, (never done it) I guess I could do:
YourApp/src/main/resources/com/mycompany/myapp/soa/something/

It helps me remember the dividing line between the core of my
application, and the business of interacting with the user.

I discovered this by looking at other people's source trees online. =)



On 10/3/07, Robert A. Decker <rd...@pgp.com> wrote:
> I found some info in the archives of the mailing list:
> http://mail-archives.apache.org/mod_mbox/tapestry-users/200704.mbox/%
> 3Cecd0e3310704061504u4fe28e4ck579cfa7599fe2643@mail.gmail.com%3E
>
> However, I don't understand the fix:
> "Layout is a component, not a page.  It goes into the components
> package.  So Layout.java needs to be in foo.bar.components, and so
> does Layout.html."
>
> I have my Layout.java in the right location, but this is the first
> I've heard of a components directory for the html part of components.
> Is there also a pages directory for the html part of pages? I don't
> have one and pages seem to work fine.
>
> What would the path be for the components html directory? Mine is
> currently at:
> project/webapp/WEB-INF/.
> My pages html files are here too.
>
> R
>
>
> On Oct 3, 2007, at 4:27 PM, Robert A. Decker wrote:
>
> > I'm trying to create the simple layout component described here:
> > http://tapestry.apache.org/tapestry5/tapestry-core/guide/
> > templates.html
> > (I've also read the wiki info on components)
> >
> > But I'm getting an exception:
> > java.lang.IllegalStateException
> > This markup writer does not have a current element. The current
> > element is established with the first call to element() and is
> > maintained across subsequent calls.
> >
> >
> > I've created Layout.html in the same location my Start.html file is
> > at:
> >
> > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> >     <head>
> >         <title>Title</title>
> >     </head>
> >     <body>
> >         <t:body/>
> >     </body>
> > </html>
> >
> >
> > I've also created Layout.java in com.company.project.components:
> >
> > package com.company.project.components;
> > public class Layout {
> >
> > }
> >
> >
> > And I have a file name Main.html that the user is sent to after
> > successfully logging in:
> >
> > <t:layout xmlns:t="http://tapestry.apache.org/schema/
> > tapestry_5_0_0.xsd">
> >
> >   Page Specific Content
> >
> > </t:layout>
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: simple Layout component

Posted by "Robert A. Decker" <rd...@pgp.com>.
I found some info in the archives of the mailing list:
http://mail-archives.apache.org/mod_mbox/tapestry-users/200704.mbox/% 
3Cecd0e3310704061504u4fe28e4ck579cfa7599fe2643@mail.gmail.com%3E

However, I don't understand the fix:
"Layout is a component, not a page.  It goes into the components
package.  So Layout.java needs to be in foo.bar.components, and so
does Layout.html."

I have my Layout.java in the right location, but this is the first  
I've heard of a components directory for the html part of components.  
Is there also a pages directory for the html part of pages? I don't  
have one and pages seem to work fine.

What would the path be for the components html directory? Mine is  
currently at:
project/webapp/WEB-INF/.
My pages html files are here too.

R


On Oct 3, 2007, at 4:27 PM, Robert A. Decker wrote:

> I'm trying to create the simple layout component described here:
> http://tapestry.apache.org/tapestry5/tapestry-core/guide/ 
> templates.html
> (I've also read the wiki info on components)
>
> But I'm getting an exception:
> java.lang.IllegalStateException
> This markup writer does not have a current element. The current  
> element is established with the first call to element() and is  
> maintained across subsequent calls.
>
>
> I've created Layout.html in the same location my Start.html file is  
> at:
>
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
>     <head>
>         <title>Title</title>
>     </head>
>     <body>
>         <t:body/>
>     </body>
> </html>
>
>
> I've also created Layout.java in com.company.project.components:
>
> package com.company.project.components;
> public class Layout {
>
> }
>
>
> And I have a file name Main.html that the user is sent to after  
> successfully logging in:
>
> <t:layout xmlns:t="http://tapestry.apache.org/schema/ 
> tapestry_5_0_0.xsd">
>
>   Page Specific Content
>
> </t:layout>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org