Responses below... 

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> Sent: 04 December 2006 15:54
> To: [email protected]
> Subject: Re: CLAY: Using clay to import file in remoting method
> 
> >From: "Ian.Priest" <[EMAIL PROTECTED]>
> >
> > Hi,
> > 
> > I've set up a couple of remoting methods, but I don't 
> really want to 
> > code the HTML in my java method.
> 
> Are you talking about Shale/Ajax style of remoting?

Yup.

> 
> >What I'd like to do is have the snippet  of HTML returned by my 
> >remoting method defined in the same way as the  rest of the 
> html on the 
> >site; i.e. in an html file that's loaded by  Clay.
> > 
> 
> Do you want to pull this html content from a place other than 
> the classpath or the web context root?

>From within the web-context root. In fact it would live side-by-side
with the main page. So if I had page main.html and wanted to return
snippet.html as the response to the remoting call then I'd arrange it as

/somedir/main.html
/somedir/snippet.html

> Is the html dynamic or static?
> 

The content of snippet.html would be dynamic. In my use case I go and
get a List of extra info about an item and would want snippet.html to
render a table with a row per List entry.

> 
> > My remoting method fetches a detail list when a table row 
> is clicked, 
> > a little like opening the next level of a tree, so what I'd 
> like to do is:
> > 
> > 1. User clicks on row x in the table
> > 2. Remoting method viewController.getDetails() is called 3. 
> > viewController.getDetails() loads details of x as a List and sets a 
> > variable theList 4. viewController.getDetails() creates an 
> instance of 
> > Clay that loads file theDetails.html 5. File 
> theDetails.html renders 
> > as a couple of table rows using
> > viewController.getTheList() to get table contents 6. 
> > viewController.getDetails() gets the HTML rendered by the Clay load 
> > and writes it out as the response to the remoting method
> > 
> 
> Are you trying to render a static document or do you need to 
> collect and store data?
Not static. I collect then want to display more data. My remoting method
gets more information then renders a dynamic document to return as the
response from the remoting method. The dynamic document displays the
extra info.

> 
> Or, are you looking at the Clay runtime options using the 
> shapeValidator callback and you would like to load html fragments?
>
Yes, I'm trying to understand how (or if) I could use class
org.apache.shale.clay.component.Clay to process a subtree and then grab
the HTML result of that processing to return as the output of my
remoting method.

> 
> > Doing the above means the HTML style agency will still be 
> able to edit 
> > the HTML look and feel without me having to edit the Java 
> code for them. 
> 
> What part of the java code are you talking about?

The remoting method. It generates HTML and uses a ResponseWriter to
output the HTML to the page that made the remoting call. I would like to
generate that HTML by calling Clay and having it render a sub-tree, but
I can't see how to do it or even if it can be done. Pseudo-code...

Class MyViewController extends AbstractViewController {

        /**
        * Called by AJAX function in page main.html
        *
        * Use Clay to render a dynamic snippet of HTML then return it.
        */
        public void aRemotingMethod() {
                // Get item id
                String id =
getFacesContext().getExternalContext().getRequestMap().get("id");

                // Get more detail about item with id
                List<String> extraDetails = getExtraDetail(id);

                /** This works, but HTML is hard-coded into the
ViewController...
                String html = "<table>"
                for( String detail: extraDetails ) {
                        html += "<tr><td>" + detail + "</td></tr>";
                }
                html += "</table>";
        
                // Can I somehow use Clay here to generate HTML?
                // Clay clay = new Clay();
                // Need to set URL of snippet.html as view id
                // Need to make extraDetail available to the processor.
Make this class
                // the ViewController for snippet.html?
                // Get clay to process: clay.encodeBegin()?
                // Get HTML back from clay somehow once sub-tree is
created
                // String html = clay.?????()

                // Return HTML
                writer.write(html);
                getFacesContext.responseComplete();

        }
}

> 
> > I want to avoid reloading the page or sending a full tree 
> view that can 
> > just be unfolded as the page size would then be potentially 
> very large. 
> > 
> > Is this possible? Are there any code examples? 
> > 
> 
> I'm not sure that I understand your use case but it sounds 
> like you want the html content fragments to be managed 
> outside of the web application?

I want the HTML fragment to be managed outside the ViewController class
code, yes. The third parties can edit snippet.html to alter the
look-and-feel.

> 
> 
> > Cheers, 
> > Ian. 
> > 
> 
> Gary
> 
> 
> > 
> > 
> 

Reply via email to