You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Martin Grotzke <ma...@freiheit.com> on 2007/05/24 18:45:21 UTC

T5 page lifecycle

Hello,

I have a simple search page with an input field (query) and a submit
button.

The submit implementation returns a page link to receive a bookmarkable
page (with pagename and query param), and the onActivate(String) then
performs a search for the query.

Although, the onActivate(String) is called twice, and another onActivate
method that I do have, is also invoked afterwards (this intended for
other links on the page, and is also performing a search).
The other onActivate method is called with "main_functions.js" as an
argument, which is simply a <script type=... element in the header of
the page template...

Am I using T5 wrong, or is this a problem of T5?

See the following log, the page class and the template for more info.

Thanx in advance,
cheers,
Martin


==== log output for a submit ==========================================

[INFO ] 2007-05-24 18:30:04,727 btpool0-2 org.comp.app.pages.Search.submit:
Received submit with query ipod, returning pageLink now.

[INFO ] 2007-05-24 18:30:04,895 btpool0-2 org.comp.app.pages.Search.onActivate:
[1] Got invoked with query ipod

[INFO ] 2007-05-24 18:30:04,896 btpool0-2 org.comp.app.pages.Search.performSearch:
Starting search...

[INFO ] 2007-05-24 18:30:05,519 btpool0-2 org.comp.app.pages.Search.onActivate:
[1] Got invoked with query ipod

[INFO ] 2007-05-24 18:30:05,520 btpool0-2 org.comp.app.pages.Search.performSearch:
Starting search...

[INFO ] 2007-05-24 18:30:05,616 btpool0-2 org.comp.app.pages.Search.onActivate:
[2] Got invoked with query js and facetConstraints main_functions.js

[INFO ] 2007-05-24 18:30:05,617 btpool0-2 org.comp.app.pages.Search.performSearch:
Starting search...


==== page class (with relevant methods) =========================================

public class Search {
    
    private static final Log LOG = LogFactory.getLog( Search.class );

    @Inject
    private ComponentResources _componentResources;
    
    /* [snip, several properties] */
    
    @Persist( "flash" )
    private String _query;
    
    public void onActivate(String query) {
        LOG.info( "[1] Got invoked with query " + _query );
        if ( _query != null ) {
            _query = query;
            performSearch();
        }
    }
    
    public void onActivate(String query, List<String> facetConstraints) {
        LOG.info( "[2] Got invoked with query " + _query + " and facetConstraints " + CollectionUtil.toCSV( facetConstraints ) );
        _query = query;
        if ( facetConstraints != null ) {
            for( String facetConstraint : facetConstraints ) {
                /* [snip] */
            }
        }
        performSearch();
    }

    @OnEvent(value="submit")
    public Link submit() {
        LOG.info( "Received submit with query " + _query + ", returning pageLink now." );
        return _componentResources.createPageLink( getClass().getSimpleName(), new Object[]{ _query } );
    }

    public void performSearch() {
        LOG.info( "Starting search..." );
        final SearchResult result = _searchService.search( getQuery(), _selectedFacetConstraints,
                null, 10, 5 );
        
        _numFound = result.getNumFound();
        
        _products = result.getProducts();
        
        _facets = result.getFacets();
    }
    
    /* [snip] */
    
}


==== page template (short version) =====================================

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
    <script type="text/javascript" src="js/main_functions.js"></script>
</head>
<body>
    <t:form t:id="search_form">
	<t:textfield t:id="q" t:value="query" />
	<input type="submit" id="submit" value="suchen"/>
    </t:form>
</body>



-- 
Martin Grotzke
Dipl.-Inf.

freiheit.com technologies gmbh
Straßenbahnring 22 / 20251 Hamburg, Germany
fon       +49 (0)40 / 890584-0
fax       +49 (0)40 / 890584-20
HRB Hamburg 70814

eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof

RE: T5 Script component [WAS: Re: T5 page lifecycle]

Posted by Kristian Marinkovic <kr...@porsche.co.at>.
caching is one advantage of using assets 

another advantage is the possibility to let tapestry decide
how your assets are delivered: plain or compressed

the asset service will determine browser and type 
of asset  to decide  whether  it can use compression. 
(if gzip is accepted :))

jesse did a great job implementing this in Tapestry 4.
Its just a matter of time till its ported to Tapestry 5 :)

see org.apache.tapestry.asset.AssetService in Tapestry 4

g,
kris




Martin Grotzke <ma...@javakaffee.de> 
29.05.2007 11:17
Bitte antworten an
"Tapestry users" <us...@tapestry.apache.org>


An
Tapestry users <us...@tapestry.apache.org>
Kopie

Thema
RE: T5 Script component [WAS: Re: T5 page lifecycle]






On Tue, 2007-05-29 at 09:36 +0200, Kristian Marinkovic wrote:
> instead of resolving the path to your resource manually you can 
> use the asset service (useful when thinking of portlets) 
What exactly is the advantage of using the AssetSource? Is it e.g.
caching or s.th. else?
In respect to the Request that I used I suppose for a portlet
environment it should only be necessary to provide another (portlet
specific) implementation.

Cheers,
Martin


> 
> i wrote a stylesheet component myself that works like your 
> script component :) ... and i enjoyed writing it. 
> 
> 
> public class Script { 
> 
>     @Inject 
>     private AssetSource assetSource; 
> 
> 
>     @BeginRender
>    boolean renderMessage( MarkupWriter writer ) { 
>        .... 
>        Asset script = assetSource.findAsset(null, _src, null); 
>        .... 
>        writer.element( "script",
>                "type", _type,
>                "src", script.toClientUrl()) 
> } 
> 
> @Component(parameters={"src=context:js/mainFunction.js"}) 
> Script script; 
> 
> 
> g, 
> kris 
> 
> 
> 
> 
> 
> 
> 
> Martin Grotzke
> <ma...@javakaffee.de> 
> 
> 26.05.2007 14:40 
>         Bitte antworten an
>          "Tapestry users"
>     <us...@tapestry.apache.org>
> 
> 
> 
> 
>                An
> Tapestry users
> <us...@tapestry.apache.org> 
>             Kopie
> 
>             Thema
> T5 Script
> component [WAS:
> Re: T5 page
> lifecycle]
> 
> 
> 
> 
> 
> 
> 
> 
> thanx, good to know that.
> 
> Although, I prefer having a template that can be further developed by
> page designers, so I wrote a Script component that can be used like
> this:
> 
> <script type="text/javascript" t:type="script"
> src="js/main_functions.js"/>
> 
> The script component class:
> 
> public class Script {
> 
>    @Inject
>    private Request _request;
>    @Parameter(required = true, defaultPrefix="literal")
>    private String _type;
>    @Parameter(required = true, defaultPrefix="literal")
>    private String _src;
> 
>    @BeginRender
>    boolean renderMessage( MarkupWriter writer ) {
>        writer.element( "script",
>                "type", _type,
>                "src", _request.getContextPath() + "/" + _src );
>        writer.end();
>        return false;
>    }
> 
> }
> 
> Is there anything that could be improved?
> 
> Btw: I really love how easy it is to write a component in T5, you
> just have to do what you want, nothing more - really, really nice!!
> 
> Cheers,
> Martin
> 
> 
> 
> On Fri, 2007-05-25 at 10:13 -0700, Howard Lewis Ship wrote:
> > Yes, you can.  The AssetSource service is public, so you can ask it
> for a
> > dynamically determined service.
> > 
> > In 5.0.5 snapshot, you can do the following:
> > 
> > @Inject
> > private Request _request;
> > 
> > public Request getRequest() { return _request; }
> > 
> > public String getLibraryPath() { return ... }
> > 
> > And in the template ...
> > 
> > <body>
> > <script type="text/javascript"
> src="${request.contextPath}/${libraryPath}"/>
> >  ...
> > 
> > 
> > 5.0.5-SNAPSHOT supports expansions inside attributes, even of
> non-component
> > elements, and you can do some simple string-assembly inline.  What
> this
> > doesn't do is ensure that the library exists, or handle localization
> of the
> > library (perhaps more relevant for an image than a JavaScript
> library).
> > 
> > 
> > 
> > On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > >
> > > On Fri, 2007-05-25 at 07:54 -0700, Howard Lewis Ship wrote:
> > > > There isn't a component, but you can in your page or component
> class:
> > > >
> > > > @Inject @Path("context:js/main_functions.js")
> > > > private Asset _library;
> > > is it possible to set the "js/main_functions.js" dynamically
> > > via java, or retrieve it from a properties file (setting it via
> > > java would be preferred)?
> > >
> > > thx && cheers,
> > > martin
> > >
> > >
> > > >
> > > > @Environmental
> > > > private PageRenderSupport _renderSupport;
> > > >
> > > > void beginRender() {
> > > >   _renderSupport.addScriptLink(_library);
> > > > }
> > > >
> > > >
> > > > ... yes this can/should be wrapped up into a more convienient
> component.
> > > > I've also added a JIRA suggestion for an annotation to take care
> of this
> > > as
> > > > well.
> > > >
> > > > On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > > >
> > > > > On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> > > > > > Need an ls -lR of src/main/webapp
> > > > > >
> > > > > > I suspect you have a link to a .js file that doesn't exist.
>  If it
> > > did
> > > > > > exist, the request would be passed off to the servlet
> container.
> > > Since
> > > > > it
> > > > > > doesn't, and it looks like a Tapestry page request, it's
> being
> > > passed
> > > > > into
> > > > > > Tapestry.
> > > > > Howard, that was the case. The url was /myapp/search/ipod
> (page
> > > Search)
> > > > > and the template contained
> > > > > <script type="text/javascript"
> src="js/main_functions.js"></script>
> > > > >
> > > > > Changing this to
> > > > > <script type="text/javascript"
> > > src="/myapp/js/main_functions.js"></script>
> > > > >
> > > > > fixes the problem.
> > > > >
> > > > > Is there a component that can produce this script tag with a
> correctly
> > > > > prefixed src attribute?
> > > > >
> > > > > Thx && cheers,
> > > > > Martin
> > > > >
> > > > >
> > > > > >
> > > > > > On 5/24/07, Martin Grotzke <ma...@javakaffee.de>
> wrote:
> > > > > > >
> > > > > > > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship
> wrote:
> > > > > > > > I suspect there's a conflict between your page name, and
> a
> > > folder of
> > > > > > > your
> > > > > > > > web application.  How about an ls -lR of your context
> folder?
> > > > > > > Is the context folder what is specified with the
> context-param
> > > > > > > "tapestry.app-package"?
> > > > > > >
> > > > > > > Then here it is:
> > > > > > >
> > > > > > >
> > > > > > >
> > > > >
> > >
> 
===============================================================================
> > > > > > > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > > > > > > src/main/java/org/company/app/
> > > > > > > src/main/java/org/company/app/:
> > > > > > > total 24
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> > > > > > >
> > > > > > > src/main/java/org/company/app/business:
> > > > > > > total 28
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > > > > > > SearchServiceDummyImpl.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17
> SearchService.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > > > > > > SearchServiceSolrImpl2.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21
> > > > > SearchServiceSolrImpl.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/model:
> > > > > > > total 20
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17
> > > FacetConstraint.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17
> FacetItem.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34
> Product.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17
> SearchResult.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/pages:
> > > > > > > total 12
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/services:
> > > > > > > total 4
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46
> AppModule.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/tapestry:
> > > > > > > total 4
> > > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> > > > > > >
> > > > > > > src/main/java/org/company/app/tapestry/util:
> > > > > > > total 4
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38
> AssetImpl.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/util:
> > > > > > > total 20
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28
> > > CollectionUtil.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> > > > > > >
> > > > > > >
> > > > >
> > >
> 
===============================================================================
> > > > > > >
> > > > > > >
> > > > > > > And this is the output of "ls -lR
> src/main/webapp/WEB-INF/":
> > > > > > > src/main/webapp/WEB-INF/:
> > > > > > > total 20
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16
> > > applicationContext.xml
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> > > > > > >
> > > > > > >
> > > > > > > Thanx,
> > > > > > > Martin
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > Does main_functions.js exist and if so, where?
> > > > > > > >
> > > > > > > > On 5/24/07, Martin Grotzke <ma...@freiheit.com>
> wrote:
> > > > > > > > >
> > > > > > > > > Hello,
> > > > > > > > >
> > > > > > > > > I have a simple search page with an input field
> (query) and a
> > > > > submit
> > > > > > > > > button.
> > > > > > > > >
> > > > > > > > > The submit implementation returns a page link to
> receive a
> > > > > > > bookmarkable
> > > > > > > > > page (with pagename and query param), and the
> > > onActivate(String)
> > > > > then
> > > > > > > > > performs a search for the query.
> > > > > > > > >
> > > > > > > > > Although, the onActivate(String) is called twice, and
> another
> > > > > > > onActivate
> > > > > > > > > method that I do have, is also invoked afterwards
> (this
> > > intended
> > > > > for
> > > > > > > > > other links on the page, and is also performing a
> search).
> > > > > > > > > The other onActivate method is called with
> "main_functions.js"
> > > as
> > > > > an
> > > > > > > > > argument, which is simply a <script type=... element
> in the
> > > header
> > > > > of
> > > > > > > > > the page template...
> > > > > > > > >
> > > > > > > > > Am I using T5 wrong, or is this a problem of T5?
> > > > > > > > >
> > > > > > > > > See the following log, the page class and the template
> for
> > > more
> > > > > info.
> > > > > > > > >
> > > > > > > > > Thanx in advance,
> > > > > > > > > cheers,
> > > > > > > > > Martin
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > ==== log output for a submit
> > > > > > > ==========================================
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > > > > > > org.comp.app.pages.Search.submit
> > > > > > > > > :
> > > > > > > > > Received submit with query ipod, returning pageLink
> now.
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > > [1] Got invoked with query ipod
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > > Starting search...
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > > [1] Got invoked with query ipod
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > > Starting search...
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > > [2] Got invoked with query js and facetConstraints
> > > > > main_functions.js
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > > Starting search...
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > ==== page class (with relevant methods)
> > > > > > > > > =========================================
> > > > > > > > >
> > > > > > > > > public class Search {
> > > > > > > > >
> > > > > > > > >     private static final Log LOG = LogFactory.getLog(
> > > Search.class);
> > > > > > > > >
> > > > > > > > >     @Inject
> > > > > > > > >     private ComponentResources _componentResources;
> > > > > > > > >
> > > > > > > > >     /* [snip, several properties] */
> > > > > > > > >
> > > > > > > > >     @Persist( "flash" )
> > > > > > > > >     private String _query;
> > > > > > > > >
> > > > > > > > >     public void onActivate(String query) {
> > > > > > > > >         LOG.info( "[1] Got invoked with query " +
> _query );
> > > > > > > > >         if ( _query != null ) {
> > > > > > > > >             _query = query;
> > > > > > > > >             performSearch();
> > > > > > > > >         }
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     public void onActivate(String query, List<String>
> > > > > > > facetConstraints) {
> > > > > > > > >         LOG.info( "[2] Got invoked with query " +
> _query + "
> > > and
> > > > > > > > > facetConstraints " +
> CollectionUtil.toCSV( facetConstraints )
> > > );
> > > > > > > > >         _query = query;
> > > > > > > > >         if ( facetConstraints != null ) {
> > > > > > > > >             for( String facetConstraint :
> facetConstraints ) {
> > > > > > > > >                 /* [snip] */
> > > > > > > > >             }
> > > > > > > > >         }
> > > > > > > > >         performSearch();
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     @OnEvent(value="submit")
> > > > > > > > >     public Link submit() {
> > > > > > > > >         LOG.info( "Received submit with query " +
> _query + ",
> > > > > > > returning
> > > > > > > > > pageLink now." );
> > > > > > > > >         return _componentResources.createPageLink(
> > > > > > > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     public void performSearch() {
> > > > > > > > >         LOG.info( "Starting search..." );
> > > > > > > > >         final SearchResult result =
> _searchService.search(
> > > > > getQuery(),
> > > > > > > > > _selectedFacetConstraints,
> > > > > > > > >                 null, 10, 5 );
> > > > > > > > >
> > > > > > > > >         _numFound = result.getNumFound();
> > > > > > > > >
> > > > > > > > >         _products = result.getProducts();
> > > > > > > > >
> > > > > > > > >         _facets = result.getFacets();
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     /* [snip] */
> > > > > > > > >
> > > > > > > > > }
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > ==== page template (short version)
> > > > > > > =====================================
> > > > > > > > >
> > > > > > > > > <html xmlns:t="
> > > > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > > > > > > <head>
> > > > > > > > >     <script type="text/javascript"
> > > > > > > src="js/main_functions.js"></script>
> > > > > > > > > </head>
> > > > > > > > > <body>
> > > > > > > > >     <t:form t:id="search_form">
> > > > > > > > >         <t:textfield t:id="q" t:value="query" />
> > > > > > > > >         <input type="submit" id="submit"
> value="suchen"/>
> > > > > > > > >     </t:form>
> > > > > > > > > </body>
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > Martin Grotzke
> > > > > > > > > Dipl.-Inf.
> > > > > > > > >
> > > > > > > > > freiheit.com technologies gmbh
> > > > > > > > > Stra�enbahnring 22 / 20251 Hamburg, Germany
> > > > > > > > > fon       +49 (0)40 / 890584-0
> > > > > > > > > fax       +49 (0)40 / 890584-20
> > > > > > > > > HRB Hamburg 70814
> > > > > > > > >
> > > > > > > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > > > > > > Gesch�ftsf�hrer: Claudia Dietze, Stefan Richter, J�rg
> Kirchhof
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > --
> > > > > > > Martin Grotzke
> > > > > > > http://www.javakaffee.de/blog/
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > --
> > > > > Martin Grotzke
> > > > > http://www.javakaffee.de/blog/
> > > > >
> > > > >
> > > >
> > > >
> > > --
> > > Martin Grotzke
> > > http://www.javakaffee.de/blog/
> > >
> > >
> > 
> > 
> -- 
> Martin Grotzke
> http://www.javakaffee.de/blog/
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
-- 
Martin Grotzke
http://www.javakaffee.de/blog/


RE: T5 Script component [WAS: Re: T5 page lifecycle]

Posted by Martin Grotzke <ma...@javakaffee.de>.
On Tue, 2007-05-29 at 09:36 +0200, Kristian Marinkovic wrote:
> instead of resolving the path to your resource manually you can 
> use the asset service (useful when thinking of portlets) 
What exactly is the advantage of using the AssetSource? Is it e.g.
caching or s.th. else?
In respect to the Request that I used I suppose for a portlet
environment it should only be necessary to provide another (portlet
specific) implementation.

Cheers,
Martin


> 
> i wrote a stylesheet component myself that works like your 
> script component :) ... and i enjoyed writing it. 
> 
> 
> public class Script { 
> 
>     @Inject 
>     private AssetSource assetSource;  
> 
> 
>     @BeginRender
>    boolean renderMessage( MarkupWriter writer ) { 
>        .... 
>        Asset script = assetSource.findAsset(null, _src, null); 
>        .... 
>        writer.element( "script",
>                "type", _type,
>                "src", script.toClientUrl()) 
> } 
> 
> @Component(parameters={"src=context:js/mainFunction.js"}) 
> Script script; 
>          
> 
> g, 
> kris 
>          
> 
> 
> 
> 
> 
> 
> Martin Grotzke
> <ma...@javakaffee.de> 
> 
> 26.05.2007 14:40 
>         Bitte antworten an
>          "Tapestry users"
>     <us...@tapestry.apache.org>
> 
> 
> 
> 
>                An
> Tapestry users
> <us...@tapestry.apache.org> 
>             Kopie
> 
>             Thema
> T5 Script
> component [WAS:
> Re: T5 page
> lifecycle]
> 
> 
> 
> 
> 
> 
> 
> 
> thanx, good to know that.
> 
> Although, I prefer having a template that can be further developed by
> page designers, so I wrote a Script component that can be used like
> this:
> 
> <script type="text/javascript" t:type="script"
> src="js/main_functions.js"/>
> 
> The script component class:
> 
> public class Script {
>    
>    @Inject
>    private Request _request;
>    @Parameter(required = true, defaultPrefix="literal")
>    private String _type;
>    @Parameter(required = true, defaultPrefix="literal")
>    private String _src;
> 
>    @BeginRender
>    boolean renderMessage( MarkupWriter writer ) {
>        writer.element( "script",
>                "type", _type,
>                "src", _request.getContextPath() + "/" + _src );
>        writer.end();
>        return false;
>    }
>    
> }
> 
> Is there anything that could be improved?
> 
> Btw: I really love how easy it is to write a component in T5, you
> just have to do what you want, nothing more - really, really nice!!
> 
> Cheers,
> Martin
> 
> 
> 
> On Fri, 2007-05-25 at 10:13 -0700, Howard Lewis Ship wrote:
> > Yes, you can.  The AssetSource service is public, so you can ask it
> for a
> > dynamically determined service.
> > 
> > In 5.0.5 snapshot, you can do the following:
> > 
> > @Inject
> > private Request _request;
> > 
> > public Request getRequest() { return _request; }
> > 
> > public String getLibraryPath() { return ... }
> > 
> > And in the template ...
> > 
> > <body>
> > <script type="text/javascript"
> src="${request.contextPath}/${libraryPath}"/>
> >  ...
> > 
> > 
> > 5.0.5-SNAPSHOT supports expansions inside attributes, even of
> non-component
> > elements, and you can do some simple string-assembly inline.  What
> this
> > doesn't do is ensure that the library exists, or handle localization
> of the
> > library (perhaps more relevant for an image than a JavaScript
> library).
> > 
> > 
> > 
> > On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > >
> > > On Fri, 2007-05-25 at 07:54 -0700, Howard Lewis Ship wrote:
> > > > There isn't a component, but you can in your page or component
> class:
> > > >
> > > > @Inject @Path("context:js/main_functions.js")
> > > > private Asset _library;
> > > is it possible to set the "js/main_functions.js" dynamically
> > > via java, or retrieve it from a properties file (setting it via
> > > java would be preferred)?
> > >
> > > thx && cheers,
> > > martin
> > >
> > >
> > > >
> > > > @Environmental
> > > > private PageRenderSupport _renderSupport;
> > > >
> > > > void beginRender() {
> > > >   _renderSupport.addScriptLink(_library);
> > > > }
> > > >
> > > >
> > > > ... yes this can/should be wrapped up into a more convienient
> component.
> > > > I've also added a JIRA suggestion for an annotation to take care
> of this
> > > as
> > > > well.
> > > >
> > > > On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > > >
> > > > > On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> > > > > > Need an ls -lR of src/main/webapp
> > > > > >
> > > > > > I suspect you have a link to a .js file that doesn't exist.
>  If it
> > > did
> > > > > > exist, the request would be passed off to the servlet
> container.
> > > Since
> > > > > it
> > > > > > doesn't, and it looks like a Tapestry page request, it's
> being
> > > passed
> > > > > into
> > > > > > Tapestry.
> > > > > Howard, that was the case. The url was /myapp/search/ipod
> (page
> > > Search)
> > > > > and the template contained
> > > > > <script type="text/javascript"
> src="js/main_functions.js"></script>
> > > > >
> > > > > Changing this to
> > > > > <script type="text/javascript"
> > > src="/myapp/js/main_functions.js"></script>
> > > > >
> > > > > fixes the problem.
> > > > >
> > > > > Is there a component that can produce this script tag with a
> correctly
> > > > > prefixed src attribute?
> > > > >
> > > > > Thx && cheers,
> > > > > Martin
> > > > >
> > > > >
> > > > > >
> > > > > > On 5/24/07, Martin Grotzke <ma...@javakaffee.de>
> wrote:
> > > > > > >
> > > > > > > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship
> wrote:
> > > > > > > > I suspect there's a conflict between your page name, and
> a
> > > folder of
> > > > > > > your
> > > > > > > > web application.  How about an ls -lR of your context
> folder?
> > > > > > > Is the context folder what is specified with the
> context-param
> > > > > > > "tapestry.app-package"?
> > > > > > >
> > > > > > > Then here it is:
> > > > > > >
> > > > > > >
> > > > > > >
> > > > >
> > >
> ===============================================================================
> > > > > > > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > > > > > > src/main/java/org/company/app/
> > > > > > > src/main/java/org/company/app/:
> > > > > > > total 24
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> > > > > > >
> > > > > > > src/main/java/org/company/app/business:
> > > > > > > total 28
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > > > > > > SearchServiceDummyImpl.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17
> SearchService.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > > > > > > SearchServiceSolrImpl2.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21
> > > > > SearchServiceSolrImpl.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/model:
> > > > > > > total 20
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17
> > > FacetConstraint.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17
> FacetItem.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34
> Product.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17
> SearchResult.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/pages:
> > > > > > > total 12
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/services:
> > > > > > > total 4
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46
> AppModule.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/tapestry:
> > > > > > > total 4
> > > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> > > > > > >
> > > > > > > src/main/java/org/company/app/tapestry/util:
> > > > > > > total 4
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38
> AssetImpl.java
> > > > > > >
> > > > > > > src/main/java/org/company/app/util:
> > > > > > > total 20
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28
> > > CollectionUtil.java
> > > > > > > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> > > > > > >
> > > > > > >
> > > > >
> > >
> ===============================================================================
> > > > > > >
> > > > > > >
> > > > > > > And this is the output of "ls -lR
> src/main/webapp/WEB-INF/":
> > > > > > > src/main/webapp/WEB-INF/:
> > > > > > > total 20
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16
> > > applicationContext.xml
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > > > > > > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> > > > > > >
> > > > > > >
> > > > > > > Thanx,
> > > > > > > Martin
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > Does main_functions.js exist and if so, where?
> > > > > > > >
> > > > > > > > On 5/24/07, Martin Grotzke <ma...@freiheit.com>
> wrote:
> > > > > > > > >
> > > > > > > > > Hello,
> > > > > > > > >
> > > > > > > > > I have a simple search page with an input field
> (query) and a
> > > > > submit
> > > > > > > > > button.
> > > > > > > > >
> > > > > > > > > The submit implementation returns a page link to
> receive a
> > > > > > > bookmarkable
> > > > > > > > > page (with pagename and query param), and the
> > > onActivate(String)
> > > > > then
> > > > > > > > > performs a search for the query.
> > > > > > > > >
> > > > > > > > > Although, the onActivate(String) is called twice, and
> another
> > > > > > > onActivate
> > > > > > > > > method that I do have, is also invoked afterwards
> (this
> > > intended
> > > > > for
> > > > > > > > > other links on the page, and is also performing a
> search).
> > > > > > > > > The other onActivate method is called with
> "main_functions.js"
> > > as
> > > > > an
> > > > > > > > > argument, which is simply a <script type=... element
> in the
> > > header
> > > > > of
> > > > > > > > > the page template...
> > > > > > > > >
> > > > > > > > > Am I using T5 wrong, or is this a problem of T5?
> > > > > > > > >
> > > > > > > > > See the following log, the page class and the template
> for
> > > more
> > > > > info.
> > > > > > > > >
> > > > > > > > > Thanx in advance,
> > > > > > > > > cheers,
> > > > > > > > > Martin
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > ==== log output for a submit
> > > > > > > ==========================================
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > > > > > > org.comp.app.pages.Search.submit
> > > > > > > > > :
> > > > > > > > > Received submit with query ipod, returning pageLink
> now.
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > > [1] Got invoked with query ipod
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > > Starting search...
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > > [1] Got invoked with query ipod
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > > Starting search...
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > > [2] Got invoked with query js and facetConstraints
> > > > > main_functions.js
> > > > > > > > >
> > > > > > > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > > Starting search...
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > ==== page class (with relevant methods)
> > > > > > > > > =========================================
> > > > > > > > >
> > > > > > > > > public class Search {
> > > > > > > > >
> > > > > > > > >     private static final Log LOG = LogFactory.getLog(
> > > Search.class);
> > > > > > > > >
> > > > > > > > >     @Inject
> > > > > > > > >     private ComponentResources _componentResources;
> > > > > > > > >
> > > > > > > > >     /* [snip, several properties] */
> > > > > > > > >
> > > > > > > > >     @Persist( "flash" )
> > > > > > > > >     private String _query;
> > > > > > > > >
> > > > > > > > >     public void onActivate(String query) {
> > > > > > > > >         LOG.info( "[1] Got invoked with query " +
> _query );
> > > > > > > > >         if ( _query != null ) {
> > > > > > > > >             _query = query;
> > > > > > > > >             performSearch();
> > > > > > > > >         }
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     public void onActivate(String query, List<String>
> > > > > > > facetConstraints) {
> > > > > > > > >         LOG.info( "[2] Got invoked with query " +
> _query + "
> > > and
> > > > > > > > > facetConstraints " +
> CollectionUtil.toCSV( facetConstraints )
> > > );
> > > > > > > > >         _query = query;
> > > > > > > > >         if ( facetConstraints != null ) {
> > > > > > > > >             for( String facetConstraint :
> facetConstraints ) {
> > > > > > > > >                 /* [snip] */
> > > > > > > > >             }
> > > > > > > > >         }
> > > > > > > > >         performSearch();
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     @OnEvent(value="submit")
> > > > > > > > >     public Link submit() {
> > > > > > > > >         LOG.info( "Received submit with query " +
> _query + ",
> > > > > > > returning
> > > > > > > > > pageLink now." );
> > > > > > > > >         return _componentResources.createPageLink(
> > > > > > > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     public void performSearch() {
> > > > > > > > >         LOG.info( "Starting search..." );
> > > > > > > > >         final SearchResult result =
> _searchService.search(
> > > > > getQuery(),
> > > > > > > > > _selectedFacetConstraints,
> > > > > > > > >                 null, 10, 5 );
> > > > > > > > >
> > > > > > > > >         _numFound = result.getNumFound();
> > > > > > > > >
> > > > > > > > >         _products = result.getProducts();
> > > > > > > > >
> > > > > > > > >         _facets = result.getFacets();
> > > > > > > > >     }
> > > > > > > > >
> > > > > > > > >     /* [snip] */
> > > > > > > > >
> > > > > > > > > }
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > ==== page template (short version)
> > > > > > > =====================================
> > > > > > > > >
> > > > > > > > > <html xmlns:t="
> > > > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > > > > > > <head>
> > > > > > > > >     <script type="text/javascript"
> > > > > > > src="js/main_functions.js"></script>
> > > > > > > > > </head>
> > > > > > > > > <body>
> > > > > > > > >     <t:form t:id="search_form">
> > > > > > > > >         <t:textfield t:id="q" t:value="query" />
> > > > > > > > >         <input type="submit" id="submit"
> value="suchen"/>
> > > > > > > > >     </t:form>
> > > > > > > > > </body>
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > Martin Grotzke
> > > > > > > > > Dipl.-Inf.
> > > > > > > > >
> > > > > > > > > freiheit.com technologies gmbh
> > > > > > > > > Straßenbahnring 22 / 20251 Hamburg, Germany
> > > > > > > > > fon       +49 (0)40 / 890584-0
> > > > > > > > > fax       +49 (0)40 / 890584-20
> > > > > > > > > HRB Hamburg 70814
> > > > > > > > >
> > > > > > > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > > > > > > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg
> Kirchhof
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > --
> > > > > > > Martin Grotzke
> > > > > > > http://www.javakaffee.de/blog/
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > --
> > > > > Martin Grotzke
> > > > > http://www.javakaffee.de/blog/
> > > > >
> > > > >
> > > >
> > > >
> > > --
> > > Martin Grotzke
> > > http://www.javakaffee.de/blog/
> > >
> > >
> > 
> > 
> -- 
> Martin Grotzke
> http://www.javakaffee.de/blog/
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

RE: T5 Script component [WAS: Re: T5 page lifecycle]

Posted by Kristian Marinkovic <kr...@porsche.co.at>.
hi martin,

instead of resolving the path to your resource manually you can
use the asset service (useful when thinking of portlets)

i wrote a stylesheet component myself that works like your
script component :) ... and i enjoyed writing it.


public class Script {

    @Inject
    private AssetSource assetSource; 


    @BeginRender
    boolean renderMessage( MarkupWriter writer ) {
       ....
       Asset script = assetSource.findAsset(null, _src, null);
       ....
       writer.element( "script",
                "type", _type,
                "src", script.toClientUrl())
}

@Component(parameters={"src=context:js/mainFunction.js"})
Script script;
 

g,
kris
 







Martin Grotzke <ma...@javakaffee.de> 
26.05.2007 14:40
Bitte antworten an
"Tapestry users" <us...@tapestry.apache.org>


An
Tapestry users <us...@tapestry.apache.org>
Kopie

Thema
T5 Script component [WAS: Re: T5 page lifecycle]






thanx, good to know that.

Although, I prefer having a template that can be further developed by
page designers, so I wrote a Script component that can be used like
this:

<script type="text/javascript" t:type="script" 
src="js/main_functions.js"/>

The script component class:

public class Script {
 
    @Inject
    private Request _request;
    @Parameter(required = true, defaultPrefix="literal")
    private String _type;
    @Parameter(required = true, defaultPrefix="literal")
    private String _src;

    @BeginRender
    boolean renderMessage( MarkupWriter writer ) {
        writer.element( "script",
                "type", _type,
                "src", _request.getContextPath() + "/" + _src );
        writer.end();
        return false;
    }
 
}

Is there anything that could be improved?

Btw: I really love how easy it is to write a component in T5, you
just have to do what you want, nothing more - really, really nice!!

Cheers,
Martin



On Fri, 2007-05-25 at 10:13 -0700, Howard Lewis Ship wrote:
> Yes, you can.  The AssetSource service is public, so you can ask it for 
a
> dynamically determined service.
> 
> In 5.0.5 snapshot, you can do the following:
> 
> @Inject
> private Request _request;
> 
> public Request getRequest() { return _request; }
> 
> public String getLibraryPath() { return ... }
> 
> And in the template ...
> 
> <body>
> <script type="text/javascript" 
src="${request.contextPath}/${libraryPath}"/>
>  ...
> 
> 
> 5.0.5-SNAPSHOT supports expansions inside attributes, even of 
non-component
> elements, and you can do some simple string-assembly inline.  What this
> doesn't do is ensure that the library exists, or handle localization of 
the
> library (perhaps more relevant for an image than a JavaScript library).
> 
> 
> 
> On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> >
> > On Fri, 2007-05-25 at 07:54 -0700, Howard Lewis Ship wrote:
> > > There isn't a component, but you can in your page or component 
class:
> > >
> > > @Inject @Path("context:js/main_functions.js")
> > > private Asset _library;
> > is it possible to set the "js/main_functions.js" dynamically
> > via java, or retrieve it from a properties file (setting it via
> > java would be preferred)?
> >
> > thx && cheers,
> > martin
> >
> >
> > >
> > > @Environmental
> > > private PageRenderSupport _renderSupport;
> > >
> > > void beginRender() {
> > >   _renderSupport.addScriptLink(_library);
> > > }
> > >
> > >
> > > ... yes this can/should be wrapped up into a more convienient 
component.
> > > I've also added a JIRA suggestion for an annotation to take care of 
this
> > as
> > > well.
> > >
> > > On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > >
> > > > On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> > > > > Need an ls -lR of src/main/webapp
> > > > >
> > > > > I suspect you have a link to a .js file that doesn't exist.  If 
it
> > did
> > > > > exist, the request would be passed off to the servlet container.
> > Since
> > > > it
> > > > > doesn't, and it looks like a Tapestry page request, it's being
> > passed
> > > > into
> > > > > Tapestry.
> > > > Howard, that was the case. The url was /myapp/search/ipod (page
> > Search)
> > > > and the template contained
> > > > <script type="text/javascript" 
src="js/main_functions.js"></script>
> > > >
> > > > Changing this to
> > > > <script type="text/javascript"
> > src="/myapp/js/main_functions.js"></script>
> > > >
> > > > fixes the problem.
> > > >
> > > > Is there a component that can produce this script tag with a 
correctly
> > > > prefixed src attribute?
> > > >
> > > > Thx && cheers,
> > > > Martin
> > > >
> > > >
> > > > >
> > > > > On 5/24/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > > > >
> > > > > > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> > > > > > > I suspect there's a conflict between your page name, and a
> > folder of
> > > > > > your
> > > > > > > web application.  How about an ls -lR of your context 
folder?
> > > > > > Is the context folder what is specified with the context-param
> > > > > > "tapestry.app-package"?
> > > > > >
> > > > > > Then here it is:
> > > > > >
> > > > > >
> > > > > >
> > > >
> > 
===============================================================================
> > > > > > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > > > > > src/main/java/org/company/app/
> > > > > > src/main/java/org/company/app/:
> > > > > > total 24
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> > > > > >
> > > > > > src/main/java/org/company/app/business:
> > > > > > total 28
> > > > > > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > > > > > SearchServiceDummyImpl.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 
SearchService.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > > > > > SearchServiceSolrImpl2.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21
> > > > SearchServiceSolrImpl.java
> > > > > >
> > > > > > src/main/java/org/company/app/model:
> > > > > > total 20
> > > > > > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17
> > FacetConstraint.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 
SearchResult.java
> > > > > >
> > > > > > src/main/java/org/company/app/pages:
> > > > > > total 12
> > > > > > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> > > > > >
> > > > > > src/main/java/org/company/app/services:
> > > > > > total 4
> > > > > > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java
> > > > > >
> > > > > > src/main/java/org/company/app/tapestry:
> > > > > > total 4
> > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> > > > > >
> > > > > > src/main/java/org/company/app/tapestry/util:
> > > > > > total 4
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java
> > > > > >
> > > > > > src/main/java/org/company/app/util:
> > > > > > total 20
> > > > > > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28
> > CollectionUtil.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> > > > > >
> > > > > >
> > > >
> > 
===============================================================================
> > > > > >
> > > > > >
> > > > > > And this is the output of "ls -lR src/main/webapp/WEB-INF/":
> > > > > > src/main/webapp/WEB-INF/:
> > > > > > total 20
> > > > > > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16
> > applicationContext.xml
> > > > > > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> > > > > >
> > > > > >
> > > > > > Thanx,
> > > > > > Martin
> > > > > >
> > > > > >
> > > > > > >
> > > > > > > Does main_functions.js exist and if so, where?
> > > > > > >
> > > > > > > On 5/24/07, Martin Grotzke <ma...@freiheit.com> 
wrote:
> > > > > > > >
> > > > > > > > Hello,
> > > > > > > >
> > > > > > > > I have a simple search page with an input field (query) 
and a
> > > > submit
> > > > > > > > button.
> > > > > > > >
> > > > > > > > The submit implementation returns a page link to receive a
> > > > > > bookmarkable
> > > > > > > > page (with pagename and query param), and the
> > onActivate(String)
> > > > then
> > > > > > > > performs a search for the query.
> > > > > > > >
> > > > > > > > Although, the onActivate(String) is called twice, and 
another
> > > > > > onActivate
> > > > > > > > method that I do have, is also invoked afterwards (this
> > intended
> > > > for
> > > > > > > > other links on the page, and is also performing a search).
> > > > > > > > The other onActivate method is called with 
"main_functions.js"
> > as
> > > > an
> > > > > > > > argument, which is simply a <script type=... element in 
the
> > header
> > > > of
> > > > > > > > the page template...
> > > > > > > >
> > > > > > > > Am I using T5 wrong, or is this a problem of T5?
> > > > > > > >
> > > > > > > > See the following log, the page class and the template for
> > more
> > > > info.
> > > > > > > >
> > > > > > > > Thanx in advance,
> > > > > > > > cheers,
> > > > > > > > Martin
> > > > > > > >
> > > > > > > >
> > > > > > > > ==== log output for a submit
> > > > > > ==========================================
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > > > > > org.comp.app.pages.Search.submit
> > > > > > > > :
> > > > > > > > Received submit with query ipod, returning pageLink now.
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > [1] Got invoked with query ipod
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > Starting search...
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > [1] Got invoked with query ipod
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > Starting search...
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > [2] Got invoked with query js and facetConstraints
> > > > main_functions.js
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > Starting search...
> > > > > > > >
> > > > > > > >
> > > > > > > > ==== page class (with relevant methods)
> > > > > > > > =========================================
> > > > > > > >
> > > > > > > > public class Search {
> > > > > > > >
> > > > > > > >     private static final Log LOG = LogFactory.getLog(
> > Search.class);
> > > > > > > >
> > > > > > > >     @Inject
> > > > > > > >     private ComponentResources _componentResources;
> > > > > > > >
> > > > > > > >     /* [snip, several properties] */
> > > > > > > >
> > > > > > > >     @Persist( "flash" )
> > > > > > > >     private String _query;
> > > > > > > >
> > > > > > > >     public void onActivate(String query) {
> > > > > > > >         LOG.info( "[1] Got invoked with query " + _query 
);
> > > > > > > >         if ( _query != null ) {
> > > > > > > >             _query = query;
> > > > > > > >             performSearch();
> > > > > > > >         }
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     public void onActivate(String query, List<String>
> > > > > > facetConstraints) {
> > > > > > > >         LOG.info( "[2] Got invoked with query " + _query + 
"
> > and
> > > > > > > > facetConstraints " + CollectionUtil.toCSV( 
facetConstraints )
> > );
> > > > > > > >         _query = query;
> > > > > > > >         if ( facetConstraints != null ) {
> > > > > > > >             for( String facetConstraint : facetConstraints 
) {
> > > > > > > >                 /* [snip] */
> > > > > > > >             }
> > > > > > > >         }
> > > > > > > >         performSearch();
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     @OnEvent(value="submit")
> > > > > > > >     public Link submit() {
> > > > > > > >         LOG.info( "Received submit with query " + _query + 
",
> > > > > > returning
> > > > > > > > pageLink now." );
> > > > > > > >         return _componentResources.createPageLink(
> > > > > > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     public void performSearch() {
> > > > > > > >         LOG.info( "Starting search..." );
> > > > > > > >         final SearchResult result = _searchService.search(
> > > > getQuery(),
> > > > > > > > _selectedFacetConstraints,
> > > > > > > >                 null, 10, 5 );
> > > > > > > >
> > > > > > > >         _numFound = result.getNumFound();
> > > > > > > >
> > > > > > > >         _products = result.getProducts();
> > > > > > > >
> > > > > > > >         _facets = result.getFacets();
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     /* [snip] */
> > > > > > > >
> > > > > > > > }
> > > > > > > >
> > > > > > > >
> > > > > > > > ==== page template (short version)
> > > > > > =====================================
> > > > > > > >
> > > > > > > > <html xmlns:t="
> > > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > > > > > <head>
> > > > > > > >     <script type="text/javascript"
> > > > > > src="js/main_functions.js"></script>
> > > > > > > > </head>
> > > > > > > > <body>
> > > > > > > >     <t:form t:id="search_form">
> > > > > > > >         <t:textfield t:id="q" t:value="query" />
> > > > > > > >         <input type="submit" id="submit" value="suchen"/>
> > > > > > > >     </t:form>
> > > > > > > > </body>
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Martin Grotzke
> > > > > > > > Dipl.-Inf.
> > > > > > > >
> > > > > > > > freiheit.com technologies gmbh
> > > > > > > > Stra�enbahnring 22 / 20251 Hamburg, Germany
> > > > > > > > fon       +49 (0)40 / 890584-0
> > > > > > > > fax       +49 (0)40 / 890584-20
> > > > > > > > HRB Hamburg 70814
> > > > > > > >
> > > > > > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > > > > > Gesch�ftsf�hrer: Claudia Dietze, Stefan Richter, J�rg 
Kirchhof
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > --
> > > > > > Martin Grotzke
> > > > > > http://www.javakaffee.de/blog/
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > --
> > > > Martin Grotzke
> > > > http://www.javakaffee.de/blog/
> > > >
> > > >
> > >
> > >
> > --
> > Martin Grotzke
> > http://www.javakaffee.de/blog/
> >
> >
> 
> 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/


T5 Script component [WAS: Re: T5 page lifecycle]

Posted by Martin Grotzke <ma...@javakaffee.de>.
thanx, good to know that.

Although, I prefer having a template that can be further developed by
page designers, so I wrote a Script component that can be used like
this:

<script type="text/javascript" t:type="script" src="js/main_functions.js"/>

The script component class:

public class Script {
    
    @Inject
    private Request _request;
    @Parameter(required = true, defaultPrefix="literal")
    private String _type;
    @Parameter(required = true, defaultPrefix="literal")
    private String _src;

    @BeginRender
    boolean renderMessage( MarkupWriter writer ) {
        writer.element( "script",
                "type", _type,
                "src", _request.getContextPath() + "/" + _src );
        writer.end();
        return false;
    }
    
}

Is there anything that could be improved?

Btw: I really love how easy it is to write a component in T5, you
just have to do what you want, nothing more - really, really nice!!

Cheers,
Martin



On Fri, 2007-05-25 at 10:13 -0700, Howard Lewis Ship wrote:
> Yes, you can.  The AssetSource service is public, so you can ask it for a
> dynamically determined service.
> 
> In 5.0.5 snapshot, you can do the following:
> 
> @Inject
> private Request _request;
> 
> public Request getRequest() { return _request; }
> 
> public String getLibraryPath() { return ... }
> 
> And in the template ...
> 
> <body>
> <script type="text/javascript" src="${request.contextPath}/${libraryPath}"/>
>  ...
> 
> 
> 5.0.5-SNAPSHOT supports expansions inside attributes, even of non-component
> elements, and you can do some simple string-assembly inline.  What this
> doesn't do is ensure that the library exists, or handle localization of the
> library (perhaps more relevant for an image than a JavaScript library).
> 
> 
> 
> On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> >
> > On Fri, 2007-05-25 at 07:54 -0700, Howard Lewis Ship wrote:
> > > There isn't a component, but you can in your page or component class:
> > >
> > > @Inject @Path("context:js/main_functions.js")
> > > private Asset _library;
> > is it possible to set the "js/main_functions.js" dynamically
> > via java, or retrieve it from a properties file (setting it via
> > java would be preferred)?
> >
> > thx && cheers,
> > martin
> >
> >
> > >
> > > @Environmental
> > > private PageRenderSupport _renderSupport;
> > >
> > > void beginRender() {
> > >   _renderSupport.addScriptLink(_library);
> > > }
> > >
> > >
> > > ... yes this can/should be wrapped up into a more convienient component.
> > > I've also added a JIRA suggestion for an annotation to take care of this
> > as
> > > well.
> > >
> > > On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > >
> > > > On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> > > > > Need an ls -lR of src/main/webapp
> > > > >
> > > > > I suspect you have a link to a .js file that doesn't exist.  If it
> > did
> > > > > exist, the request would be passed off to the servlet container.
> > Since
> > > > it
> > > > > doesn't, and it looks like a Tapestry page request, it's being
> > passed
> > > > into
> > > > > Tapestry.
> > > > Howard, that was the case. The url was /myapp/search/ipod (page
> > Search)
> > > > and the template contained
> > > > <script type="text/javascript" src="js/main_functions.js"></script>
> > > >
> > > > Changing this to
> > > > <script type="text/javascript"
> > src="/myapp/js/main_functions.js"></script>
> > > >
> > > > fixes the problem.
> > > >
> > > > Is there a component that can produce this script tag with a correctly
> > > > prefixed src attribute?
> > > >
> > > > Thx && cheers,
> > > > Martin
> > > >
> > > >
> > > > >
> > > > > On 5/24/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > > > >
> > > > > > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> > > > > > > I suspect there's a conflict between your page name, and a
> > folder of
> > > > > > your
> > > > > > > web application.  How about an ls -lR of your context folder?
> > > > > > Is the context folder what is specified with the context-param
> > > > > > "tapestry.app-package"?
> > > > > >
> > > > > > Then here it is:
> > > > > >
> > > > > >
> > > > > >
> > > >
> > ===============================================================================
> > > > > > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > > > > > src/main/java/org/company/app/
> > > > > > src/main/java/org/company/app/:
> > > > > > total 24
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> > > > > >
> > > > > > src/main/java/org/company/app/business:
> > > > > > total 28
> > > > > > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > > > > > SearchServiceDummyImpl.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 SearchService.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > > > > > SearchServiceSolrImpl2.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21
> > > > SearchServiceSolrImpl.java
> > > > > >
> > > > > > src/main/java/org/company/app/model:
> > > > > > total 20
> > > > > > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17
> > FacetConstraint.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 SearchResult.java
> > > > > >
> > > > > > src/main/java/org/company/app/pages:
> > > > > > total 12
> > > > > > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> > > > > >
> > > > > > src/main/java/org/company/app/services:
> > > > > > total 4
> > > > > > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java
> > > > > >
> > > > > > src/main/java/org/company/app/tapestry:
> > > > > > total 4
> > > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> > > > > >
> > > > > > src/main/java/org/company/app/tapestry/util:
> > > > > > total 4
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java
> > > > > >
> > > > > > src/main/java/org/company/app/util:
> > > > > > total 20
> > > > > > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28
> > CollectionUtil.java
> > > > > > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> > > > > >
> > > > > >
> > > >
> > ===============================================================================
> > > > > >
> > > > > >
> > > > > > And this is the output of "ls -lR src/main/webapp/WEB-INF/":
> > > > > > src/main/webapp/WEB-INF/:
> > > > > > total 20
> > > > > > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16
> > applicationContext.xml
> > > > > > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > > > > > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> > > > > >
> > > > > >
> > > > > > Thanx,
> > > > > > Martin
> > > > > >
> > > > > >
> > > > > > >
> > > > > > > Does main_functions.js exist and if so, where?
> > > > > > >
> > > > > > > On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
> > > > > > > >
> > > > > > > > Hello,
> > > > > > > >
> > > > > > > > I have a simple search page with an input field (query) and a
> > > > submit
> > > > > > > > button.
> > > > > > > >
> > > > > > > > The submit implementation returns a page link to receive a
> > > > > > bookmarkable
> > > > > > > > page (with pagename and query param), and the
> > onActivate(String)
> > > > then
> > > > > > > > performs a search for the query.
> > > > > > > >
> > > > > > > > Although, the onActivate(String) is called twice, and another
> > > > > > onActivate
> > > > > > > > method that I do have, is also invoked afterwards (this
> > intended
> > > > for
> > > > > > > > other links on the page, and is also performing a search).
> > > > > > > > The other onActivate method is called with "main_functions.js"
> > as
> > > > an
> > > > > > > > argument, which is simply a <script type=... element in the
> > header
> > > > of
> > > > > > > > the page template...
> > > > > > > >
> > > > > > > > Am I using T5 wrong, or is this a problem of T5?
> > > > > > > >
> > > > > > > > See the following log, the page class and the template for
> > more
> > > > info.
> > > > > > > >
> > > > > > > > Thanx in advance,
> > > > > > > > cheers,
> > > > > > > > Martin
> > > > > > > >
> > > > > > > >
> > > > > > > > ==== log output for a submit
> > > > > > ==========================================
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > > > > > org.comp.app.pages.Search.submit
> > > > > > > > :
> > > > > > > > Received submit with query ipod, returning pageLink now.
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > [1] Got invoked with query ipod
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > Starting search...
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > [1] Got invoked with query ipod
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > Starting search...
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > > [2] Got invoked with query js and facetConstraints
> > > > main_functions.js
> > > > > > > >
> > > > > > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > > Starting search...
> > > > > > > >
> > > > > > > >
> > > > > > > > ==== page class (with relevant methods)
> > > > > > > > =========================================
> > > > > > > >
> > > > > > > > public class Search {
> > > > > > > >
> > > > > > > >     private static final Log LOG = LogFactory.getLog(
> > Search.class);
> > > > > > > >
> > > > > > > >     @Inject
> > > > > > > >     private ComponentResources _componentResources;
> > > > > > > >
> > > > > > > >     /* [snip, several properties] */
> > > > > > > >
> > > > > > > >     @Persist( "flash" )
> > > > > > > >     private String _query;
> > > > > > > >
> > > > > > > >     public void onActivate(String query) {
> > > > > > > >         LOG.info( "[1] Got invoked with query " + _query );
> > > > > > > >         if ( _query != null ) {
> > > > > > > >             _query = query;
> > > > > > > >             performSearch();
> > > > > > > >         }
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     public void onActivate(String query, List<String>
> > > > > > facetConstraints) {
> > > > > > > >         LOG.info( "[2] Got invoked with query " + _query + "
> > and
> > > > > > > > facetConstraints " + CollectionUtil.toCSV( facetConstraints )
> > );
> > > > > > > >         _query = query;
> > > > > > > >         if ( facetConstraints != null ) {
> > > > > > > >             for( String facetConstraint : facetConstraints ) {
> > > > > > > >                 /* [snip] */
> > > > > > > >             }
> > > > > > > >         }
> > > > > > > >         performSearch();
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     @OnEvent(value="submit")
> > > > > > > >     public Link submit() {
> > > > > > > >         LOG.info( "Received submit with query " + _query + ",
> > > > > > returning
> > > > > > > > pageLink now." );
> > > > > > > >         return _componentResources.createPageLink(
> > > > > > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     public void performSearch() {
> > > > > > > >         LOG.info( "Starting search..." );
> > > > > > > >         final SearchResult result = _searchService.search(
> > > > getQuery(),
> > > > > > > > _selectedFacetConstraints,
> > > > > > > >                 null, 10, 5 );
> > > > > > > >
> > > > > > > >         _numFound = result.getNumFound();
> > > > > > > >
> > > > > > > >         _products = result.getProducts();
> > > > > > > >
> > > > > > > >         _facets = result.getFacets();
> > > > > > > >     }
> > > > > > > >
> > > > > > > >     /* [snip] */
> > > > > > > >
> > > > > > > > }
> > > > > > > >
> > > > > > > >
> > > > > > > > ==== page template (short version)
> > > > > > =====================================
> > > > > > > >
> > > > > > > > <html xmlns:t="
> > > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > > > > > <head>
> > > > > > > >     <script type="text/javascript"
> > > > > > src="js/main_functions.js"></script>
> > > > > > > > </head>
> > > > > > > > <body>
> > > > > > > >     <t:form t:id="search_form">
> > > > > > > >         <t:textfield t:id="q" t:value="query" />
> > > > > > > >         <input type="submit" id="submit" value="suchen"/>
> > > > > > > >     </t:form>
> > > > > > > > </body>
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Martin Grotzke
> > > > > > > > Dipl.-Inf.
> > > > > > > >
> > > > > > > > freiheit.com technologies gmbh
> > > > > > > > Straßenbahnring 22 / 20251 Hamburg, Germany
> > > > > > > > fon       +49 (0)40 / 890584-0
> > > > > > > > fax       +49 (0)40 / 890584-20
> > > > > > > > HRB Hamburg 70814
> > > > > > > >
> > > > > > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > > > > > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > --
> > > > > > Martin Grotzke
> > > > > > http://www.javakaffee.de/blog/
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > --
> > > > Martin Grotzke
> > > > http://www.javakaffee.de/blog/
> > > >
> > > >
> > >
> > >
> > --
> > Martin Grotzke
> > http://www.javakaffee.de/blog/
> >
> >
> 
> 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 page lifecycle

Posted by Howard Lewis Ship <hl...@gmail.com>.
Yes, you can.  The AssetSource service is public, so you can ask it for a
dynamically determined service.

In 5.0.5 snapshot, you can do the following:

@Inject
private Request _request;

public Request getRequest() { return _request; }

public String getLibraryPath() { return ... }

And in the template ...

<body>
<script type="text/javascript" src="${request.contextPath}/${libraryPath}"/>
 ...


5.0.5-SNAPSHOT supports expansions inside attributes, even of non-component
elements, and you can do some simple string-assembly inline.  What this
doesn't do is ensure that the library exists, or handle localization of the
library (perhaps more relevant for an image than a JavaScript library).



On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
>
> On Fri, 2007-05-25 at 07:54 -0700, Howard Lewis Ship wrote:
> > There isn't a component, but you can in your page or component class:
> >
> > @Inject @Path("context:js/main_functions.js")
> > private Asset _library;
> is it possible to set the "js/main_functions.js" dynamically
> via java, or retrieve it from a properties file (setting it via
> java would be preferred)?
>
> thx && cheers,
> martin
>
>
> >
> > @Environmental
> > private PageRenderSupport _renderSupport;
> >
> > void beginRender() {
> >   _renderSupport.addScriptLink(_library);
> > }
> >
> >
> > ... yes this can/should be wrapped up into a more convienient component.
> > I've also added a JIRA suggestion for an annotation to take care of this
> as
> > well.
> >
> > On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > >
> > > On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> > > > Need an ls -lR of src/main/webapp
> > > >
> > > > I suspect you have a link to a .js file that doesn't exist.  If it
> did
> > > > exist, the request would be passed off to the servlet container.
> Since
> > > it
> > > > doesn't, and it looks like a Tapestry page request, it's being
> passed
> > > into
> > > > Tapestry.
> > > Howard, that was the case. The url was /myapp/search/ipod (page
> Search)
> > > and the template contained
> > > <script type="text/javascript" src="js/main_functions.js"></script>
> > >
> > > Changing this to
> > > <script type="text/javascript"
> src="/myapp/js/main_functions.js"></script>
> > >
> > > fixes the problem.
> > >
> > > Is there a component that can produce this script tag with a correctly
> > > prefixed src attribute?
> > >
> > > Thx && cheers,
> > > Martin
> > >
> > >
> > > >
> > > > On 5/24/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > > >
> > > > > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> > > > > > I suspect there's a conflict between your page name, and a
> folder of
> > > > > your
> > > > > > web application.  How about an ls -lR of your context folder?
> > > > > Is the context folder what is specified with the context-param
> > > > > "tapestry.app-package"?
> > > > >
> > > > > Then here it is:
> > > > >
> > > > >
> > > > >
> > >
> ===============================================================================
> > > > > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > > > > src/main/java/org/company/app/
> > > > > src/main/java/org/company/app/:
> > > > > total 24
> > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> > > > >
> > > > > src/main/java/org/company/app/business:
> > > > > total 28
> > > > > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > > > > SearchServiceDummyImpl.java
> > > > > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 SearchService.java
> > > > > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > > > > SearchServiceSolrImpl2.java
> > > > > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21
> > > SearchServiceSolrImpl.java
> > > > >
> > > > > src/main/java/org/company/app/model:
> > > > > total 20
> > > > > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17
> FacetConstraint.java
> > > > > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
> > > > > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > > > > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
> > > > > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 SearchResult.java
> > > > >
> > > > > src/main/java/org/company/app/pages:
> > > > > total 12
> > > > > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > > > > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> > > > >
> > > > > src/main/java/org/company/app/services:
> > > > > total 4
> > > > > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java
> > > > >
> > > > > src/main/java/org/company/app/tapestry:
> > > > > total 4
> > > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> > > > >
> > > > > src/main/java/org/company/app/tapestry/util:
> > > > > total 4
> > > > > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java
> > > > >
> > > > > src/main/java/org/company/app/util:
> > > > > total 20
> > > > > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28
> CollectionUtil.java
> > > > > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> > > > >
> > > > >
> > >
> ===============================================================================
> > > > >
> > > > >
> > > > > And this is the output of "ls -lR src/main/webapp/WEB-INF/":
> > > > > src/main/webapp/WEB-INF/:
> > > > > total 20
> > > > > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16
> applicationContext.xml
> > > > > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > > > > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > > > > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> > > > >
> > > > >
> > > > > Thanx,
> > > > > Martin
> > > > >
> > > > >
> > > > > >
> > > > > > Does main_functions.js exist and if so, where?
> > > > > >
> > > > > > On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
> > > > > > >
> > > > > > > Hello,
> > > > > > >
> > > > > > > I have a simple search page with an input field (query) and a
> > > submit
> > > > > > > button.
> > > > > > >
> > > > > > > The submit implementation returns a page link to receive a
> > > > > bookmarkable
> > > > > > > page (with pagename and query param), and the
> onActivate(String)
> > > then
> > > > > > > performs a search for the query.
> > > > > > >
> > > > > > > Although, the onActivate(String) is called twice, and another
> > > > > onActivate
> > > > > > > method that I do have, is also invoked afterwards (this
> intended
> > > for
> > > > > > > other links on the page, and is also performing a search).
> > > > > > > The other onActivate method is called with "main_functions.js"
> as
> > > an
> > > > > > > argument, which is simply a <script type=... element in the
> header
> > > of
> > > > > > > the page template...
> > > > > > >
> > > > > > > Am I using T5 wrong, or is this a problem of T5?
> > > > > > >
> > > > > > > See the following log, the page class and the template for
> more
> > > info.
> > > > > > >
> > > > > > > Thanx in advance,
> > > > > > > cheers,
> > > > > > > Martin
> > > > > > >
> > > > > > >
> > > > > > > ==== log output for a submit
> > > > > ==========================================
> > > > > > >
> > > > > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > > > > org.comp.app.pages.Search.submit
> > > > > > > :
> > > > > > > Received submit with query ipod, returning pageLink now.
> > > > > > >
> > > > > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > [1] Got invoked with query ipod
> > > > > > >
> > > > > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > Starting search...
> > > > > > >
> > > > > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > [1] Got invoked with query ipod
> > > > > > >
> > > > > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > Starting search...
> > > > > > >
> > > > > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > > [2] Got invoked with query js and facetConstraints
> > > main_functions.js
> > > > > > >
> > > > > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > > Starting search...
> > > > > > >
> > > > > > >
> > > > > > > ==== page class (with relevant methods)
> > > > > > > =========================================
> > > > > > >
> > > > > > > public class Search {
> > > > > > >
> > > > > > >     private static final Log LOG = LogFactory.getLog(
> Search.class);
> > > > > > >
> > > > > > >     @Inject
> > > > > > >     private ComponentResources _componentResources;
> > > > > > >
> > > > > > >     /* [snip, several properties] */
> > > > > > >
> > > > > > >     @Persist( "flash" )
> > > > > > >     private String _query;
> > > > > > >
> > > > > > >     public void onActivate(String query) {
> > > > > > >         LOG.info( "[1] Got invoked with query " + _query );
> > > > > > >         if ( _query != null ) {
> > > > > > >             _query = query;
> > > > > > >             performSearch();
> > > > > > >         }
> > > > > > >     }
> > > > > > >
> > > > > > >     public void onActivate(String query, List<String>
> > > > > facetConstraints) {
> > > > > > >         LOG.info( "[2] Got invoked with query " + _query + "
> and
> > > > > > > facetConstraints " + CollectionUtil.toCSV( facetConstraints )
> );
> > > > > > >         _query = query;
> > > > > > >         if ( facetConstraints != null ) {
> > > > > > >             for( String facetConstraint : facetConstraints ) {
> > > > > > >                 /* [snip] */
> > > > > > >             }
> > > > > > >         }
> > > > > > >         performSearch();
> > > > > > >     }
> > > > > > >
> > > > > > >     @OnEvent(value="submit")
> > > > > > >     public Link submit() {
> > > > > > >         LOG.info( "Received submit with query " + _query + ",
> > > > > returning
> > > > > > > pageLink now." );
> > > > > > >         return _componentResources.createPageLink(
> > > > > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > > > > >     }
> > > > > > >
> > > > > > >     public void performSearch() {
> > > > > > >         LOG.info( "Starting search..." );
> > > > > > >         final SearchResult result = _searchService.search(
> > > getQuery(),
> > > > > > > _selectedFacetConstraints,
> > > > > > >                 null, 10, 5 );
> > > > > > >
> > > > > > >         _numFound = result.getNumFound();
> > > > > > >
> > > > > > >         _products = result.getProducts();
> > > > > > >
> > > > > > >         _facets = result.getFacets();
> > > > > > >     }
> > > > > > >
> > > > > > >     /* [snip] */
> > > > > > >
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > > ==== page template (short version)
> > > > > =====================================
> > > > > > >
> > > > > > > <html xmlns:t="
> > > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > > > > <head>
> > > > > > >     <script type="text/javascript"
> > > > > src="js/main_functions.js"></script>
> > > > > > > </head>
> > > > > > > <body>
> > > > > > >     <t:form t:id="search_form">
> > > > > > >         <t:textfield t:id="q" t:value="query" />
> > > > > > >         <input type="submit" id="submit" value="suchen"/>
> > > > > > >     </t:form>
> > > > > > > </body>
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Martin Grotzke
> > > > > > > Dipl.-Inf.
> > > > > > >
> > > > > > > freiheit.com technologies gmbh
> > > > > > > Straßenbahnring 22 / 20251 Hamburg, Germany
> > > > > > > fon       +49 (0)40 / 890584-0
> > > > > > > fax       +49 (0)40 / 890584-20
> > > > > > > HRB Hamburg 70814
> > > > > > >
> > > > > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > > > > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > --
> > > > > Martin Grotzke
> > > > > http://www.javakaffee.de/blog/
> > > > >
> > > > >
> > > >
> > > >
> > > --
> > > Martin Grotzke
> > > http://www.javakaffee.de/blog/
> > >
> > >
> >
> >
> --
> Martin Grotzke
> http://www.javakaffee.de/blog/
>
>


-- 
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

Re: T5 page lifecycle

Posted by Martin Grotzke <ma...@javakaffee.de>.
On Fri, 2007-05-25 at 07:54 -0700, Howard Lewis Ship wrote:
> There isn't a component, but you can in your page or component class:
> 
> @Inject @Path("context:js/main_functions.js")
> private Asset _library;
is it possible to set the "js/main_functions.js" dynamically
via java, or retrieve it from a properties file (setting it via
java would be preferred)?

thx && cheers,
martin


> 
> @Environmental
> private PageRenderSupport _renderSupport;
> 
> void beginRender() {
>   _renderSupport.addScriptLink(_library);
> }
> 
> 
> ... yes this can/should be wrapped up into a more convienient component.
> I've also added a JIRA suggestion for an annotation to take care of this as
> well.
> 
> On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> >
> > On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> > > Need an ls -lR of src/main/webapp
> > >
> > > I suspect you have a link to a .js file that doesn't exist.  If it did
> > > exist, the request would be passed off to the servlet container. Since
> > it
> > > doesn't, and it looks like a Tapestry page request, it's being passed
> > into
> > > Tapestry.
> > Howard, that was the case. The url was /myapp/search/ipod (page Search)
> > and the template contained
> > <script type="text/javascript" src="js/main_functions.js"></script>
> >
> > Changing this to
> > <script type="text/javascript" src="/myapp/js/main_functions.js"></script>
> >
> > fixes the problem.
> >
> > Is there a component that can produce this script tag with a correctly
> > prefixed src attribute?
> >
> > Thx && cheers,
> > Martin
> >
> >
> > >
> > > On 5/24/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > > >
> > > > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> > > > > I suspect there's a conflict between your page name, and a folder of
> > > > your
> > > > > web application.  How about an ls -lR of your context folder?
> > > > Is the context folder what is specified with the context-param
> > > > "tapestry.app-package"?
> > > >
> > > > Then here it is:
> > > >
> > > >
> > > >
> > ===============================================================================
> > > > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > > > src/main/java/org/company/app/
> > > > src/main/java/org/company/app/:
> > > > total 24
> > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > > > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> > > >
> > > > src/main/java/org/company/app/business:
> > > > total 28
> > > > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > > > SearchServiceDummyImpl.java
> > > > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 SearchService.java
> > > > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > > > SearchServiceSolrImpl2.java
> > > > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21
> > SearchServiceSolrImpl.java
> > > >
> > > > src/main/java/org/company/app/model:
> > > > total 20
> > > > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17 FacetConstraint.java
> > > > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
> > > > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > > > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
> > > > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 SearchResult.java
> > > >
> > > > src/main/java/org/company/app/pages:
> > > > total 12
> > > > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > > > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> > > >
> > > > src/main/java/org/company/app/services:
> > > > total 4
> > > > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java
> > > >
> > > > src/main/java/org/company/app/tapestry:
> > > > total 4
> > > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> > > >
> > > > src/main/java/org/company/app/tapestry/util:
> > > > total 4
> > > > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java
> > > >
> > > > src/main/java/org/company/app/util:
> > > > total 20
> > > > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28 CollectionUtil.java
> > > > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> > > >
> > > >
> > ===============================================================================
> > > >
> > > >
> > > > And this is the output of "ls -lR src/main/webapp/WEB-INF/":
> > > > src/main/webapp/WEB-INF/:
> > > > total 20
> > > > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16 applicationContext.xml
> > > > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > > > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > > > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> > > >
> > > >
> > > > Thanx,
> > > > Martin
> > > >
> > > >
> > > > >
> > > > > Does main_functions.js exist and if so, where?
> > > > >
> > > > > On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
> > > > > >
> > > > > > Hello,
> > > > > >
> > > > > > I have a simple search page with an input field (query) and a
> > submit
> > > > > > button.
> > > > > >
> > > > > > The submit implementation returns a page link to receive a
> > > > bookmarkable
> > > > > > page (with pagename and query param), and the onActivate(String)
> > then
> > > > > > performs a search for the query.
> > > > > >
> > > > > > Although, the onActivate(String) is called twice, and another
> > > > onActivate
> > > > > > method that I do have, is also invoked afterwards (this intended
> > for
> > > > > > other links on the page, and is also performing a search).
> > > > > > The other onActivate method is called with "main_functions.js" as
> > an
> > > > > > argument, which is simply a <script type=... element in the header
> > of
> > > > > > the page template...
> > > > > >
> > > > > > Am I using T5 wrong, or is this a problem of T5?
> > > > > >
> > > > > > See the following log, the page class and the template for more
> > info.
> > > > > >
> > > > > > Thanx in advance,
> > > > > > cheers,
> > > > > > Martin
> > > > > >
> > > > > >
> > > > > > ==== log output for a submit
> > > > ==========================================
> > > > > >
> > > > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > > > org.comp.app.pages.Search.submit
> > > > > > :
> > > > > > Received submit with query ipod, returning pageLink now.
> > > > > >
> > > > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > [1] Got invoked with query ipod
> > > > > >
> > > > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > Starting search...
> > > > > >
> > > > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > [1] Got invoked with query ipod
> > > > > >
> > > > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > Starting search...
> > > > > >
> > > > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > > > org.comp.app.pages.Search.onActivate:
> > > > > > [2] Got invoked with query js and facetConstraints
> > main_functions.js
> > > > > >
> > > > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > > > org.comp.app.pages.Search.performSearch:
> > > > > > Starting search...
> > > > > >
> > > > > >
> > > > > > ==== page class (with relevant methods)
> > > > > > =========================================
> > > > > >
> > > > > > public class Search {
> > > > > >
> > > > > >     private static final Log LOG = LogFactory.getLog( Search.class);
> > > > > >
> > > > > >     @Inject
> > > > > >     private ComponentResources _componentResources;
> > > > > >
> > > > > >     /* [snip, several properties] */
> > > > > >
> > > > > >     @Persist( "flash" )
> > > > > >     private String _query;
> > > > > >
> > > > > >     public void onActivate(String query) {
> > > > > >         LOG.info( "[1] Got invoked with query " + _query );
> > > > > >         if ( _query != null ) {
> > > > > >             _query = query;
> > > > > >             performSearch();
> > > > > >         }
> > > > > >     }
> > > > > >
> > > > > >     public void onActivate(String query, List<String>
> > > > facetConstraints) {
> > > > > >         LOG.info( "[2] Got invoked with query " + _query + " and
> > > > > > facetConstraints " + CollectionUtil.toCSV( facetConstraints ) );
> > > > > >         _query = query;
> > > > > >         if ( facetConstraints != null ) {
> > > > > >             for( String facetConstraint : facetConstraints ) {
> > > > > >                 /* [snip] */
> > > > > >             }
> > > > > >         }
> > > > > >         performSearch();
> > > > > >     }
> > > > > >
> > > > > >     @OnEvent(value="submit")
> > > > > >     public Link submit() {
> > > > > >         LOG.info( "Received submit with query " + _query + ",
> > > > returning
> > > > > > pageLink now." );
> > > > > >         return _componentResources.createPageLink(
> > > > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > > > >     }
> > > > > >
> > > > > >     public void performSearch() {
> > > > > >         LOG.info( "Starting search..." );
> > > > > >         final SearchResult result = _searchService.search(
> > getQuery(),
> > > > > > _selectedFacetConstraints,
> > > > > >                 null, 10, 5 );
> > > > > >
> > > > > >         _numFound = result.getNumFound();
> > > > > >
> > > > > >         _products = result.getProducts();
> > > > > >
> > > > > >         _facets = result.getFacets();
> > > > > >     }
> > > > > >
> > > > > >     /* [snip] */
> > > > > >
> > > > > > }
> > > > > >
> > > > > >
> > > > > > ==== page template (short version)
> > > > =====================================
> > > > > >
> > > > > > <html xmlns:t="
> > http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > > > <head>
> > > > > >     <script type="text/javascript"
> > > > src="js/main_functions.js"></script>
> > > > > > </head>
> > > > > > <body>
> > > > > >     <t:form t:id="search_form">
> > > > > >         <t:textfield t:id="q" t:value="query" />
> > > > > >         <input type="submit" id="submit" value="suchen"/>
> > > > > >     </t:form>
> > > > > > </body>
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Martin Grotzke
> > > > > > Dipl.-Inf.
> > > > > >
> > > > > > freiheit.com technologies gmbh
> > > > > > Straßenbahnring 22 / 20251 Hamburg, Germany
> > > > > > fon       +49 (0)40 / 890584-0
> > > > > > fax       +49 (0)40 / 890584-20
> > > > > > HRB Hamburg 70814
> > > > > >
> > > > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > > > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > --
> > > > Martin Grotzke
> > > > http://www.javakaffee.de/blog/
> > > >
> > > >
> > >
> > >
> > --
> > Martin Grotzke
> > http://www.javakaffee.de/blog/
> >
> >
> 
> 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 page lifecycle

Posted by Howard Lewis Ship <hl...@gmail.com>.
There isn't a component, but you can in your page or component class:

@Inject @Path("context:js/main_functions.js")
private Asset _library;

@Environmental
private PageRenderSupport _renderSupport;

void beginRender() {
  _renderSupport.addScriptLink(_library);
}


... yes this can/should be wrapped up into a more convienient component.
I've also added a JIRA suggestion for an annotation to take care of this as
well.

On 5/25/07, Martin Grotzke <ma...@javakaffee.de> wrote:
>
> On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> > Need an ls -lR of src/main/webapp
> >
> > I suspect you have a link to a .js file that doesn't exist.  If it did
> > exist, the request would be passed off to the servlet container. Since
> it
> > doesn't, and it looks like a Tapestry page request, it's being passed
> into
> > Tapestry.
> Howard, that was the case. The url was /myapp/search/ipod (page Search)
> and the template contained
> <script type="text/javascript" src="js/main_functions.js"></script>
>
> Changing this to
> <script type="text/javascript" src="/myapp/js/main_functions.js"></script>
>
> fixes the problem.
>
> Is there a component that can produce this script tag with a correctly
> prefixed src attribute?
>
> Thx && cheers,
> Martin
>
>
> >
> > On 5/24/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> > >
> > > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> > > > I suspect there's a conflict between your page name, and a folder of
> > > your
> > > > web application.  How about an ls -lR of your context folder?
> > > Is the context folder what is specified with the context-param
> > > "tapestry.app-package"?
> > >
> > > Then here it is:
> > >
> > >
> > >
> ===============================================================================
> > > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > > src/main/java/org/company/app/
> > > src/main/java/org/company/app/:
> > > total 24
> > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> > >
> > > src/main/java/org/company/app/business:
> > > total 28
> > > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > > SearchServiceDummyImpl.java
> > > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 SearchService.java
> > > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > > SearchServiceSolrImpl2.java
> > > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21
> SearchServiceSolrImpl.java
> > >
> > > src/main/java/org/company/app/model:
> > > total 20
> > > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17 FacetConstraint.java
> > > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
> > > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
> > > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 SearchResult.java
> > >
> > > src/main/java/org/company/app/pages:
> > > total 12
> > > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> > >
> > > src/main/java/org/company/app/services:
> > > total 4
> > > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java
> > >
> > > src/main/java/org/company/app/tapestry:
> > > total 4
> > > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> > >
> > > src/main/java/org/company/app/tapestry/util:
> > > total 4
> > > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java
> > >
> > > src/main/java/org/company/app/util:
> > > total 20
> > > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28 CollectionUtil.java
> > > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> > >
> > >
> ===============================================================================
> > >
> > >
> > > And this is the output of "ls -lR src/main/webapp/WEB-INF/":
> > > src/main/webapp/WEB-INF/:
> > > total 20
> > > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16 applicationContext.xml
> > > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> > >
> > >
> > > Thanx,
> > > Martin
> > >
> > >
> > > >
> > > > Does main_functions.js exist and if so, where?
> > > >
> > > > On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
> > > > >
> > > > > Hello,
> > > > >
> > > > > I have a simple search page with an input field (query) and a
> submit
> > > > > button.
> > > > >
> > > > > The submit implementation returns a page link to receive a
> > > bookmarkable
> > > > > page (with pagename and query param), and the onActivate(String)
> then
> > > > > performs a search for the query.
> > > > >
> > > > > Although, the onActivate(String) is called twice, and another
> > > onActivate
> > > > > method that I do have, is also invoked afterwards (this intended
> for
> > > > > other links on the page, and is also performing a search).
> > > > > The other onActivate method is called with "main_functions.js" as
> an
> > > > > argument, which is simply a <script type=... element in the header
> of
> > > > > the page template...
> > > > >
> > > > > Am I using T5 wrong, or is this a problem of T5?
> > > > >
> > > > > See the following log, the page class and the template for more
> info.
> > > > >
> > > > > Thanx in advance,
> > > > > cheers,
> > > > > Martin
> > > > >
> > > > >
> > > > > ==== log output for a submit
> > > ==========================================
> > > > >
> > > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > > org.comp.app.pages.Search.submit
> > > > > :
> > > > > Received submit with query ipod, returning pageLink now.
> > > > >
> > > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > > org.comp.app.pages.Search.onActivate:
> > > > > [1] Got invoked with query ipod
> > > > >
> > > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > > org.comp.app.pages.Search.performSearch:
> > > > > Starting search...
> > > > >
> > > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > > org.comp.app.pages.Search.onActivate:
> > > > > [1] Got invoked with query ipod
> > > > >
> > > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > > org.comp.app.pages.Search.performSearch:
> > > > > Starting search...
> > > > >
> > > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > > org.comp.app.pages.Search.onActivate:
> > > > > [2] Got invoked with query js and facetConstraints
> main_functions.js
> > > > >
> > > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > > org.comp.app.pages.Search.performSearch:
> > > > > Starting search...
> > > > >
> > > > >
> > > > > ==== page class (with relevant methods)
> > > > > =========================================
> > > > >
> > > > > public class Search {
> > > > >
> > > > >     private static final Log LOG = LogFactory.getLog( Search.class);
> > > > >
> > > > >     @Inject
> > > > >     private ComponentResources _componentResources;
> > > > >
> > > > >     /* [snip, several properties] */
> > > > >
> > > > >     @Persist( "flash" )
> > > > >     private String _query;
> > > > >
> > > > >     public void onActivate(String query) {
> > > > >         LOG.info( "[1] Got invoked with query " + _query );
> > > > >         if ( _query != null ) {
> > > > >             _query = query;
> > > > >             performSearch();
> > > > >         }
> > > > >     }
> > > > >
> > > > >     public void onActivate(String query, List<String>
> > > facetConstraints) {
> > > > >         LOG.info( "[2] Got invoked with query " + _query + " and
> > > > > facetConstraints " + CollectionUtil.toCSV( facetConstraints ) );
> > > > >         _query = query;
> > > > >         if ( facetConstraints != null ) {
> > > > >             for( String facetConstraint : facetConstraints ) {
> > > > >                 /* [snip] */
> > > > >             }
> > > > >         }
> > > > >         performSearch();
> > > > >     }
> > > > >
> > > > >     @OnEvent(value="submit")
> > > > >     public Link submit() {
> > > > >         LOG.info( "Received submit with query " + _query + ",
> > > returning
> > > > > pageLink now." );
> > > > >         return _componentResources.createPageLink(
> > > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > > >     }
> > > > >
> > > > >     public void performSearch() {
> > > > >         LOG.info( "Starting search..." );
> > > > >         final SearchResult result = _searchService.search(
> getQuery(),
> > > > > _selectedFacetConstraints,
> > > > >                 null, 10, 5 );
> > > > >
> > > > >         _numFound = result.getNumFound();
> > > > >
> > > > >         _products = result.getProducts();
> > > > >
> > > > >         _facets = result.getFacets();
> > > > >     }
> > > > >
> > > > >     /* [snip] */
> > > > >
> > > > > }
> > > > >
> > > > >
> > > > > ==== page template (short version)
> > > =====================================
> > > > >
> > > > > <html xmlns:t="
> http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > > <head>
> > > > >     <script type="text/javascript"
> > > src="js/main_functions.js"></script>
> > > > > </head>
> > > > > <body>
> > > > >     <t:form t:id="search_form">
> > > > >         <t:textfield t:id="q" t:value="query" />
> > > > >         <input type="submit" id="submit" value="suchen"/>
> > > > >     </t:form>
> > > > > </body>
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Martin Grotzke
> > > > > Dipl.-Inf.
> > > > >
> > > > > freiheit.com technologies gmbh
> > > > > Straßenbahnring 22 / 20251 Hamburg, Germany
> > > > > fon       +49 (0)40 / 890584-0
> > > > > fax       +49 (0)40 / 890584-20
> > > > > HRB Hamburg 70814
> > > > >
> > > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
> > > > >
> > > > >
> > > >
> > > >
> > > --
> > > Martin Grotzke
> > > http://www.javakaffee.de/blog/
> > >
> > >
> >
> >
> --
> Martin Grotzke
> http://www.javakaffee.de/blog/
>
>


-- 
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

Re: T5 page lifecycle

Posted by Martin Grotzke <ma...@javakaffee.de>.
On Thu, 2007-05-24 at 16:36 -0700, Howard Lewis Ship wrote:
> Need an ls -lR of src/main/webapp
> 
> I suspect you have a link to a .js file that doesn't exist.  If it did
> exist, the request would be passed off to the servlet container. Since it
> doesn't, and it looks like a Tapestry page request, it's being passed into
> Tapestry.
Howard, that was the case. The url was /myapp/search/ipod (page Search)
and the template contained 
<script type="text/javascript" src="js/main_functions.js"></script>

Changing this to
<script type="text/javascript" src="/myapp/js/main_functions.js"></script>

fixes the problem.

Is there a component that can produce this script tag with a correctly
prefixed src attribute?

Thx && cheers,
Martin


> 
> On 5/24/07, Martin Grotzke <ma...@javakaffee.de> wrote:
> >
> > On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> > > I suspect there's a conflict between your page name, and a folder of
> > your
> > > web application.  How about an ls -lR of your context folder?
> > Is the context folder what is specified with the context-param
> > "tapestry.app-package"?
> >
> > Then here it is:
> >
> >
> > ===============================================================================
> > [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> > src/main/java/org/company/app/
> > src/main/java/org/company/app/:
> > total 24
> > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> > drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> > drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> > drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> > drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
> >
> > src/main/java/org/company/app/business:
> > total 28
> > -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> > SearchServiceDummyImpl.java
> > -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 SearchService.java
> > -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> > SearchServiceSolrImpl2.java
> > -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21 SearchServiceSolrImpl.java
> >
> > src/main/java/org/company/app/model:
> > total 20
> > -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17 FacetConstraint.java
> > -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
> > -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> > -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
> > -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 SearchResult.java
> >
> > src/main/java/org/company/app/pages:
> > total 12
> > -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> > -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
> >
> > src/main/java/org/company/app/services:
> > total 4
> > -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java
> >
> > src/main/java/org/company/app/tapestry:
> > total 4
> > drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
> >
> > src/main/java/org/company/app/tapestry/util:
> > total 4
> > -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java
> >
> > src/main/java/org/company/app/util:
> > total 20
> > -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28 CollectionUtil.java
> > -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
> >
> > ===============================================================================
> >
> >
> > And this is the output of "ls -lR src/main/webapp/WEB-INF/":
> > src/main/webapp/WEB-INF/:
> > total 20
> > -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16 applicationContext.xml
> > -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> > -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> > -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
> >
> >
> > Thanx,
> > Martin
> >
> >
> > >
> > > Does main_functions.js exist and if so, where?
> > >
> > > On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
> > > >
> > > > Hello,
> > > >
> > > > I have a simple search page with an input field (query) and a submit
> > > > button.
> > > >
> > > > The submit implementation returns a page link to receive a
> > bookmarkable
> > > > page (with pagename and query param), and the onActivate(String) then
> > > > performs a search for the query.
> > > >
> > > > Although, the onActivate(String) is called twice, and another
> > onActivate
> > > > method that I do have, is also invoked afterwards (this intended for
> > > > other links on the page, and is also performing a search).
> > > > The other onActivate method is called with "main_functions.js" as an
> > > > argument, which is simply a <script type=... element in the header of
> > > > the page template...
> > > >
> > > > Am I using T5 wrong, or is this a problem of T5?
> > > >
> > > > See the following log, the page class and the template for more info.
> > > >
> > > > Thanx in advance,
> > > > cheers,
> > > > Martin
> > > >
> > > >
> > > > ==== log output for a submit
> > ==========================================
> > > >
> > > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> > org.comp.app.pages.Search.submit
> > > > :
> > > > Received submit with query ipod, returning pageLink now.
> > > >
> > > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > > org.comp.app.pages.Search.onActivate:
> > > > [1] Got invoked with query ipod
> > > >
> > > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > > org.comp.app.pages.Search.performSearch:
> > > > Starting search...
> > > >
> > > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > > org.comp.app.pages.Search.onActivate:
> > > > [1] Got invoked with query ipod
> > > >
> > > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > > org.comp.app.pages.Search.performSearch:
> > > > Starting search...
> > > >
> > > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > > org.comp.app.pages.Search.onActivate:
> > > > [2] Got invoked with query js and facetConstraints main_functions.js
> > > >
> > > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > > org.comp.app.pages.Search.performSearch:
> > > > Starting search...
> > > >
> > > >
> > > > ==== page class (with relevant methods)
> > > > =========================================
> > > >
> > > > public class Search {
> > > >
> > > >     private static final Log LOG = LogFactory.getLog( Search.class );
> > > >
> > > >     @Inject
> > > >     private ComponentResources _componentResources;
> > > >
> > > >     /* [snip, several properties] */
> > > >
> > > >     @Persist( "flash" )
> > > >     private String _query;
> > > >
> > > >     public void onActivate(String query) {
> > > >         LOG.info( "[1] Got invoked with query " + _query );
> > > >         if ( _query != null ) {
> > > >             _query = query;
> > > >             performSearch();
> > > >         }
> > > >     }
> > > >
> > > >     public void onActivate(String query, List<String>
> > facetConstraints) {
> > > >         LOG.info( "[2] Got invoked with query " + _query + " and
> > > > facetConstraints " + CollectionUtil.toCSV( facetConstraints ) );
> > > >         _query = query;
> > > >         if ( facetConstraints != null ) {
> > > >             for( String facetConstraint : facetConstraints ) {
> > > >                 /* [snip] */
> > > >             }
> > > >         }
> > > >         performSearch();
> > > >     }
> > > >
> > > >     @OnEvent(value="submit")
> > > >     public Link submit() {
> > > >         LOG.info( "Received submit with query " + _query + ",
> > returning
> > > > pageLink now." );
> > > >         return _componentResources.createPageLink(
> > > > getClass().getSimpleName(), new Object[]{ _query } );
> > > >     }
> > > >
> > > >     public void performSearch() {
> > > >         LOG.info( "Starting search..." );
> > > >         final SearchResult result = _searchService.search( getQuery(),
> > > > _selectedFacetConstraints,
> > > >                 null, 10, 5 );
> > > >
> > > >         _numFound = result.getNumFound();
> > > >
> > > >         _products = result.getProducts();
> > > >
> > > >         _facets = result.getFacets();
> > > >     }
> > > >
> > > >     /* [snip] */
> > > >
> > > > }
> > > >
> > > >
> > > > ==== page template (short version)
> > =====================================
> > > >
> > > > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > > <head>
> > > >     <script type="text/javascript"
> > src="js/main_functions.js"></script>
> > > > </head>
> > > > <body>
> > > >     <t:form t:id="search_form">
> > > >         <t:textfield t:id="q" t:value="query" />
> > > >         <input type="submit" id="submit" value="suchen"/>
> > > >     </t:form>
> > > > </body>
> > > >
> > > >
> > > >
> > > > --
> > > > Martin Grotzke
> > > > Dipl.-Inf.
> > > >
> > > > freiheit.com technologies gmbh
> > > > Straßenbahnring 22 / 20251 Hamburg, Germany
> > > > fon       +49 (0)40 / 890584-0
> > > > fax       +49 (0)40 / 890584-20
> > > > HRB Hamburg 70814
> > > >
> > > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
> > > >
> > > >
> > >
> > >
> > --
> > Martin Grotzke
> > http://www.javakaffee.de/blog/
> >
> >
> 
> 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 page lifecycle

Posted by Howard Lewis Ship <hl...@gmail.com>.
Need an ls -lR of src/main/webapp

I suspect you have a link to a .js file that doesn't exist.  If it did
exist, the request would be passed off to the servlet container. Since it
doesn't, and it looks like a Tapestry page request, it's being passed into
Tapestry.

On 5/24/07, Martin Grotzke <ma...@javakaffee.de> wrote:
>
> On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> > I suspect there's a conflict between your page name, and a folder of
> your
> > web application.  How about an ls -lR of your context folder?
> Is the context folder what is specified with the context-param
> "tapestry.app-package"?
>
> Then here it is:
>
>
> ===============================================================================
> [grotzke@mescalin stealthshop-tapestry5]$ ls -lR
> src/main/java/org/company/app/
> src/main/java/org/company/app/:
> total 24
> drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
> drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
> drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
> drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
> drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
> drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util
>
> src/main/java/org/company/app/business:
> total 28
> -rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17
> SearchServiceDummyImpl.java
> -rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 SearchService.java
> -rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17
> SearchServiceSolrImpl2.java
> -rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21 SearchServiceSolrImpl.java
>
> src/main/java/org/company/app/model:
> total 20
> -rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17 FacetConstraint.java
> -rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
> -rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
> -rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
> -rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 SearchResult.java
>
> src/main/java/org/company/app/pages:
> total 12
> -rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
> -rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java
>
> src/main/java/org/company/app/services:
> total 4
> -rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java
>
> src/main/java/org/company/app/tapestry:
> total 4
> drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util
>
> src/main/java/org/company/app/tapestry/util:
> total 4
> -rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java
>
> src/main/java/org/company/app/util:
> total 20
> -rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28 CollectionUtil.java
> -rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
>
> ===============================================================================
>
>
> And this is the output of "ls -lR src/main/webapp/WEB-INF/":
> src/main/webapp/WEB-INF/:
> total 20
> -rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16 applicationContext.xml
> -rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
> -rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
> -rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml
>
>
> Thanx,
> Martin
>
>
> >
> > Does main_functions.js exist and if so, where?
> >
> > On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
> > >
> > > Hello,
> > >
> > > I have a simple search page with an input field (query) and a submit
> > > button.
> > >
> > > The submit implementation returns a page link to receive a
> bookmarkable
> > > page (with pagename and query param), and the onActivate(String) then
> > > performs a search for the query.
> > >
> > > Although, the onActivate(String) is called twice, and another
> onActivate
> > > method that I do have, is also invoked afterwards (this intended for
> > > other links on the page, and is also performing a search).
> > > The other onActivate method is called with "main_functions.js" as an
> > > argument, which is simply a <script type=... element in the header of
> > > the page template...
> > >
> > > Am I using T5 wrong, or is this a problem of T5?
> > >
> > > See the following log, the page class and the template for more info.
> > >
> > > Thanx in advance,
> > > cheers,
> > > Martin
> > >
> > >
> > > ==== log output for a submit
> ==========================================
> > >
> > > [INFO ] 2007-05-24 18:30:04,727 btpool0-2
> org.comp.app.pages.Search.submit
> > > :
> > > Received submit with query ipod, returning pageLink now.
> > >
> > > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > > org.comp.app.pages.Search.onActivate:
> > > [1] Got invoked with query ipod
> > >
> > > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > > org.comp.app.pages.Search.performSearch:
> > > Starting search...
> > >
> > > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > > org.comp.app.pages.Search.onActivate:
> > > [1] Got invoked with query ipod
> > >
> > > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > > org.comp.app.pages.Search.performSearch:
> > > Starting search...
> > >
> > > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > > org.comp.app.pages.Search.onActivate:
> > > [2] Got invoked with query js and facetConstraints main_functions.js
> > >
> > > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > > org.comp.app.pages.Search.performSearch:
> > > Starting search...
> > >
> > >
> > > ==== page class (with relevant methods)
> > > =========================================
> > >
> > > public class Search {
> > >
> > >     private static final Log LOG = LogFactory.getLog( Search.class );
> > >
> > >     @Inject
> > >     private ComponentResources _componentResources;
> > >
> > >     /* [snip, several properties] */
> > >
> > >     @Persist( "flash" )
> > >     private String _query;
> > >
> > >     public void onActivate(String query) {
> > >         LOG.info( "[1] Got invoked with query " + _query );
> > >         if ( _query != null ) {
> > >             _query = query;
> > >             performSearch();
> > >         }
> > >     }
> > >
> > >     public void onActivate(String query, List<String>
> facetConstraints) {
> > >         LOG.info( "[2] Got invoked with query " + _query + " and
> > > facetConstraints " + CollectionUtil.toCSV( facetConstraints ) );
> > >         _query = query;
> > >         if ( facetConstraints != null ) {
> > >             for( String facetConstraint : facetConstraints ) {
> > >                 /* [snip] */
> > >             }
> > >         }
> > >         performSearch();
> > >     }
> > >
> > >     @OnEvent(value="submit")
> > >     public Link submit() {
> > >         LOG.info( "Received submit with query " + _query + ",
> returning
> > > pageLink now." );
> > >         return _componentResources.createPageLink(
> > > getClass().getSimpleName(), new Object[]{ _query } );
> > >     }
> > >
> > >     public void performSearch() {
> > >         LOG.info( "Starting search..." );
> > >         final SearchResult result = _searchService.search( getQuery(),
> > > _selectedFacetConstraints,
> > >                 null, 10, 5 );
> > >
> > >         _numFound = result.getNumFound();
> > >
> > >         _products = result.getProducts();
> > >
> > >         _facets = result.getFacets();
> > >     }
> > >
> > >     /* [snip] */
> > >
> > > }
> > >
> > >
> > > ==== page template (short version)
> =====================================
> > >
> > > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > > <head>
> > >     <script type="text/javascript"
> src="js/main_functions.js"></script>
> > > </head>
> > > <body>
> > >     <t:form t:id="search_form">
> > >         <t:textfield t:id="q" t:value="query" />
> > >         <input type="submit" id="submit" value="suchen"/>
> > >     </t:form>
> > > </body>
> > >
> > >
> > >
> > > --
> > > Martin Grotzke
> > > Dipl.-Inf.
> > >
> > > freiheit.com technologies gmbh
> > > Straßenbahnring 22 / 20251 Hamburg, Germany
> > > fon       +49 (0)40 / 890584-0
> > > fax       +49 (0)40 / 890584-20
> > > HRB Hamburg 70814
> > >
> > > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
> > >
> > >
> >
> >
> --
> Martin Grotzke
> http://www.javakaffee.de/blog/
>
>


-- 
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

Re: T5 page lifecycle

Posted by Martin Grotzke <ma...@javakaffee.de>.
On Thu, 2007-05-24 at 10:42 -0700, Howard Lewis Ship wrote:
> I suspect there's a conflict between your page name, and a folder of your
> web application.  How about an ls -lR of your context folder?
Is the context folder what is specified with the context-param
"tapestry.app-package"?

Then here it is:

===============================================================================
[grotzke@mescalin stealthshop-tapestry5]$ ls -lR src/main/java/org/company/app/
src/main/java/org/company/app/:
total 24
drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 business
drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:17 model
drwxrwxr-x 2 grotzke grotzke 4096 May 22 01:19 pages
drwxrwxr-x 2 grotzke grotzke 4096 May 21 18:46 services
drwxrwxr-x 3 grotzke grotzke 4096 May 22 03:33 tapestry
drwxrwxr-x 3 grotzke grotzke 4096 May 22 01:28 util

src/main/java/org/company/app/business:
total 28
-rw-rw-r-- 1 grotzke grotzke  2598 May 22 01:17 SearchServiceDummyImpl.java
-rw-rw-r-- 1 grotzke grotzke  1487 May 22 01:17 SearchService.java
-rw-rw-r-- 1 grotzke grotzke  2261 May 22 01:17 SearchServiceSolrImpl2.java
-rw-rw-r-- 1 grotzke grotzke 14338 May 24 01:21 SearchServiceSolrImpl.java

src/main/java/org/company/app/model:
total 20
-rw-rw-r-- 1 grotzke grotzke 2679 May 22 01:17 FacetConstraint.java
-rw-rw-r-- 1 grotzke grotzke 1572 May 22 01:17 FacetItem.java
-rw-rw-r-- 1 grotzke grotzke 1829 May 22 01:17 Facet.java
-rw-rw-r-- 1 grotzke grotzke 3088 May 22 03:34 Product.java
-rw-rw-r-- 1 grotzke grotzke  733 May 22 01:17 SearchResult.java

src/main/java/org/company/app/pages:
total 12
-rw-rw-r-- 1 grotzke grotzke 7035 May 24 18:47 Search.java
-rw-rw-r-- 1 grotzke grotzke  805 May 24 00:57 Start.java

src/main/java/org/company/app/services:
total 4
-rw-rw-r-- 1 grotzke grotzke 3455 May 21 18:46 AppModule.java

src/main/java/org/company/app/tapestry:
total 4
drwxrwxr-x 2 grotzke grotzke 4096 May 22 03:33 util

src/main/java/org/company/app/tapestry/util:
total 4
-rw-rw-r-- 1 grotzke grotzke 1185 May 22 03:38 AssetImpl.java

src/main/java/org/company/app/util:
total 20
-rw-rw-r-- 1 grotzke grotzke 14839 May 22 01:28 CollectionUtil.java
-rw-rw-r-- 1 grotzke grotzke  2522 May 22 01:28 Pair.java
===============================================================================


And this is the output of "ls -lR src/main/webapp/WEB-INF/":
src/main/webapp/WEB-INF/:
total 20
-rw-rw-r-- 1 grotzke grotzke 2113 May 22 01:16 applicationContext.xml
-rw-rw-r-- 1 grotzke grotzke 5076 May 24 02:27 Search.html
-rw-rw-r-- 1 grotzke grotzke 1689 May 22 01:42 Start.html
-rw-rw-r-- 1 grotzke grotzke 1584 May 22 02:13 web.xml


Thanx,
Martin


> 
> Does main_functions.js exist and if so, where?
> 
> On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
> >
> > Hello,
> >
> > I have a simple search page with an input field (query) and a submit
> > button.
> >
> > The submit implementation returns a page link to receive a bookmarkable
> > page (with pagename and query param), and the onActivate(String) then
> > performs a search for the query.
> >
> > Although, the onActivate(String) is called twice, and another onActivate
> > method that I do have, is also invoked afterwards (this intended for
> > other links on the page, and is also performing a search).
> > The other onActivate method is called with "main_functions.js" as an
> > argument, which is simply a <script type=... element in the header of
> > the page template...
> >
> > Am I using T5 wrong, or is this a problem of T5?
> >
> > See the following log, the page class and the template for more info.
> >
> > Thanx in advance,
> > cheers,
> > Martin
> >
> >
> > ==== log output for a submit ==========================================
> >
> > [INFO ] 2007-05-24 18:30:04,727 btpool0-2 org.comp.app.pages.Search.submit
> > :
> > Received submit with query ipod, returning pageLink now.
> >
> > [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> > org.comp.app.pages.Search.onActivate:
> > [1] Got invoked with query ipod
> >
> > [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> > org.comp.app.pages.Search.performSearch:
> > Starting search...
> >
> > [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> > org.comp.app.pages.Search.onActivate:
> > [1] Got invoked with query ipod
> >
> > [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> > org.comp.app.pages.Search.performSearch:
> > Starting search...
> >
> > [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> > org.comp.app.pages.Search.onActivate:
> > [2] Got invoked with query js and facetConstraints main_functions.js
> >
> > [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> > org.comp.app.pages.Search.performSearch:
> > Starting search...
> >
> >
> > ==== page class (with relevant methods)
> > =========================================
> >
> > public class Search {
> >
> >     private static final Log LOG = LogFactory.getLog( Search.class );
> >
> >     @Inject
> >     private ComponentResources _componentResources;
> >
> >     /* [snip, several properties] */
> >
> >     @Persist( "flash" )
> >     private String _query;
> >
> >     public void onActivate(String query) {
> >         LOG.info( "[1] Got invoked with query " + _query );
> >         if ( _query != null ) {
> >             _query = query;
> >             performSearch();
> >         }
> >     }
> >
> >     public void onActivate(String query, List<String> facetConstraints) {
> >         LOG.info( "[2] Got invoked with query " + _query + " and
> > facetConstraints " + CollectionUtil.toCSV( facetConstraints ) );
> >         _query = query;
> >         if ( facetConstraints != null ) {
> >             for( String facetConstraint : facetConstraints ) {
> >                 /* [snip] */
> >             }
> >         }
> >         performSearch();
> >     }
> >
> >     @OnEvent(value="submit")
> >     public Link submit() {
> >         LOG.info( "Received submit with query " + _query + ", returning
> > pageLink now." );
> >         return _componentResources.createPageLink(
> > getClass().getSimpleName(), new Object[]{ _query } );
> >     }
> >
> >     public void performSearch() {
> >         LOG.info( "Starting search..." );
> >         final SearchResult result = _searchService.search( getQuery(),
> > _selectedFacetConstraints,
> >                 null, 10, 5 );
> >
> >         _numFound = result.getNumFound();
> >
> >         _products = result.getProducts();
> >
> >         _facets = result.getFacets();
> >     }
> >
> >     /* [snip] */
> >
> > }
> >
> >
> > ==== page template (short version) =====================================
> >
> > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> > <head>
> >     <script type="text/javascript" src="js/main_functions.js"></script>
> > </head>
> > <body>
> >     <t:form t:id="search_form">
> >         <t:textfield t:id="q" t:value="query" />
> >         <input type="submit" id="submit" value="suchen"/>
> >     </t:form>
> > </body>
> >
> >
> >
> > --
> > Martin Grotzke
> > Dipl.-Inf.
> >
> > freiheit.com technologies gmbh
> > Straßenbahnring 22 / 20251 Hamburg, Germany
> > fon       +49 (0)40 / 890584-0
> > fax       +49 (0)40 / 890584-20
> > HRB Hamburg 70814
> >
> > eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> > Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
> >
> >
> 
> 
-- 
Martin Grotzke
http://www.javakaffee.de/blog/

Re: T5 page lifecycle

Posted by Howard Lewis Ship <hl...@gmail.com>.
I suspect there's a conflict between your page name, and a folder of your
web application.  How about an ls -lR of your context folder?

Does main_functions.js exist and if so, where?

On 5/24/07, Martin Grotzke <ma...@freiheit.com> wrote:
>
> Hello,
>
> I have a simple search page with an input field (query) and a submit
> button.
>
> The submit implementation returns a page link to receive a bookmarkable
> page (with pagename and query param), and the onActivate(String) then
> performs a search for the query.
>
> Although, the onActivate(String) is called twice, and another onActivate
> method that I do have, is also invoked afterwards (this intended for
> other links on the page, and is also performing a search).
> The other onActivate method is called with "main_functions.js" as an
> argument, which is simply a <script type=... element in the header of
> the page template...
>
> Am I using T5 wrong, or is this a problem of T5?
>
> See the following log, the page class and the template for more info.
>
> Thanx in advance,
> cheers,
> Martin
>
>
> ==== log output for a submit ==========================================
>
> [INFO ] 2007-05-24 18:30:04,727 btpool0-2 org.comp.app.pages.Search.submit
> :
> Received submit with query ipod, returning pageLink now.
>
> [INFO ] 2007-05-24 18:30:04,895 btpool0-2
> org.comp.app.pages.Search.onActivate:
> [1] Got invoked with query ipod
>
> [INFO ] 2007-05-24 18:30:04,896 btpool0-2
> org.comp.app.pages.Search.performSearch:
> Starting search...
>
> [INFO ] 2007-05-24 18:30:05,519 btpool0-2
> org.comp.app.pages.Search.onActivate:
> [1] Got invoked with query ipod
>
> [INFO ] 2007-05-24 18:30:05,520 btpool0-2
> org.comp.app.pages.Search.performSearch:
> Starting search...
>
> [INFO ] 2007-05-24 18:30:05,616 btpool0-2
> org.comp.app.pages.Search.onActivate:
> [2] Got invoked with query js and facetConstraints main_functions.js
>
> [INFO ] 2007-05-24 18:30:05,617 btpool0-2
> org.comp.app.pages.Search.performSearch:
> Starting search...
>
>
> ==== page class (with relevant methods)
> =========================================
>
> public class Search {
>
>     private static final Log LOG = LogFactory.getLog( Search.class );
>
>     @Inject
>     private ComponentResources _componentResources;
>
>     /* [snip, several properties] */
>
>     @Persist( "flash" )
>     private String _query;
>
>     public void onActivate(String query) {
>         LOG.info( "[1] Got invoked with query " + _query );
>         if ( _query != null ) {
>             _query = query;
>             performSearch();
>         }
>     }
>
>     public void onActivate(String query, List<String> facetConstraints) {
>         LOG.info( "[2] Got invoked with query " + _query + " and
> facetConstraints " + CollectionUtil.toCSV( facetConstraints ) );
>         _query = query;
>         if ( facetConstraints != null ) {
>             for( String facetConstraint : facetConstraints ) {
>                 /* [snip] */
>             }
>         }
>         performSearch();
>     }
>
>     @OnEvent(value="submit")
>     public Link submit() {
>         LOG.info( "Received submit with query " + _query + ", returning
> pageLink now." );
>         return _componentResources.createPageLink(
> getClass().getSimpleName(), new Object[]{ _query } );
>     }
>
>     public void performSearch() {
>         LOG.info( "Starting search..." );
>         final SearchResult result = _searchService.search( getQuery(),
> _selectedFacetConstraints,
>                 null, 10, 5 );
>
>         _numFound = result.getNumFound();
>
>         _products = result.getProducts();
>
>         _facets = result.getFacets();
>     }
>
>     /* [snip] */
>
> }
>
>
> ==== page template (short version) =====================================
>
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <head>
>     <script type="text/javascript" src="js/main_functions.js"></script>
> </head>
> <body>
>     <t:form t:id="search_form">
>         <t:textfield t:id="q" t:value="query" />
>         <input type="submit" id="submit" value="suchen"/>
>     </t:form>
> </body>
>
>
>
> --
> Martin Grotzke
> Dipl.-Inf.
>
> freiheit.com technologies gmbh
> Straßenbahnring 22 / 20251 Hamburg, Germany
> fon       +49 (0)40 / 890584-0
> fax       +49 (0)40 / 890584-20
> HRB Hamburg 70814
>
> eb0e 645c 9730 c8a3 ee2f  1b9a 5de5 21cb c259 fe34
> Geschäftsführer: Claudia Dietze, Stefan Richter, Jörg Kirchhof
>
>


-- 
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com