>From: "Ian.Priest" <[EMAIL PROTECTED]> > > > If I might refer you all back to the original question... > > I don't want to update the component tree via a remoting call. > I do want to use Clay to render a chunk of HTML from within the remoting > method. I want to do that for consistency; it's how everything else on > the site is rendered. > I do want the remoting method to return a chunk of HTML which the page > then uses by (as Hermod realised) setting "div.innerHTML = > originalRequest.responseText" > > It sounds as though Clay won't currently do that. It would be very > useful if it could be persuaded to.
I do have an example of that in the sandbox. The getClayResource() method loads a buffer of markup from rendering clay templates. http://svn.apache.org/viewvc/shale/sandbox/shale-clay-trinidad/src/main/java/org/apache/myfaces/trinidad/blank/CatalogBacking.java?view=markup Beware of the clay implicit html to JSF component mappings. The eleven implicitly mapped elements include: 1) <a></a> 2) <form></form> 3) <input type=text> 4) <input type=checkbox> 5) <input type=radio> 6) <input type=submit> 7) <label></label> 8) <select></select> 9) <select multiple></select> 10) <option> 11) <textarea></textarea> > I have instead coded my remoting call to use Freemarker templates to > generate the HTML. That's a pain in the backside as some of the fields > use converters, which I have to provide in the Freemarker model, and > because it means a second set of HTML that renders in a different > manner, that I need to manage and that the 3rd-party design agency need > to learn to deal with. And that HTML, of course, isn't "plain html" in > the way that Clay pages can be. > Freemaker or Velocity might be the better choice. Clay was build specifically for building a JSF component tree. These other general purpose templating tools would give you more options. > Cheers, > Ian. > > Gary > > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > Sent: 07 December 2006 08:15 > > To: [email protected] > > Subject: RE: SV: CLAY: Using clay to import file in remoting method > > > > Hi > > > > Ok, that got a load of my shoulders. > > > > Now, I obvously worded my intentions wrong here. What I am > > thinking of is the case that when an asynchronous request > > comes in there should be the possibility for Clay to render > > the response. I am not suggesting to alter the component tree > > as per se. I am aware that doing so would be dangerous, > > particularly in the case where the state is held on the > > client (Severside we could have full controll over the > > component tree). > > > > Lets assume that I have a table on my page, that I want to > > update using Ajax. Now there are two possibilities here. The > > first beeing just returning data that is then handled on the > > client side using a JSON type DOM altering. The other would > > be to just set the .innerHtml of the DOM component with a > > serverside rendered response. It's the latter scenario that I > > am thinking about and where using Clay to do the rendering. > > > > Hemrod > > > > -----Original Message----- > > From: Gary VanMatre [mailto:[EMAIL PROTECTED] > > Sent: Wednesday, December 06, 2006 10:45 PM > > To: [email protected]; [EMAIL PROTECTED] > > Subject: Re: SV: CLAY: Using clay to import file in remoting method > > > > > > >From: Hermod Opstvedt > > > > > > Hi > > > > > > I think we need to give this a good hard thought. What you > > (if I read > > > you > > > right) are saying in essence is that Shale/Clay and Ajax > > will not work. > > > > > > > No, I'm *not* saying that Shale/Clay and Ajax will not work. > > The testbed in the sandbox is proof that it will work. There > > are are a couple of pages that use Trinidad's built in Ajax > > support and it works really well. I'm using clay templates > > with namespaces so they look pretty much like JSP. > > > > http://svn.apache.org/viewvc/shale/sandbox/shale-clay-trinidad > /src/main/webapp/pages/catalog.html?view=markup > > > > All you have to do is nest the components you want partial > > rendering on in a panelPartialRoot component. > > > > > > > > partialSubmit="true" text="#{foo.name}"/> > > > > > > These components know how to render the javascript required for PPR. > > This stuff is really a works of craftsmanship. I've been > > told that this is their first generation of components. The > > future stuff will blow you away with drag and drop and other > > sick client side effects. > > > > However, I don't believe that these components will allow you > > to dynamically change the structure of a view without > > recreating it. They don't have client side code adding > > widgets that are not already represented by some component in > > the backing view. The client is not swapping out chunks of > > the view tree using Ajax calls and then allowing the entire > > page to be posted back as a whole. > > > > > > > That is a scenario that we can not have - This needs to be > > addressed, > > > otherwise we will loose out before we even begin. > > > > > > > The scenario that Clay will need some help with is Ajax + dynamic > > views using Shale's remoting. > > > > There are multiple scenarios for using remoting. The Shale > > remoting is > > service centric versus component centric. > > > > > > > The scenario that I outlined, is something that we need to > > support in these > > > web 2.0(3.0?) days because fullpage rendering of dynamic > > content is not > > > acceptable anymore - hence the efforts of PPR in for > > instance in Trinidad > > > and also other opensource projects. If PPR of Dynamic > > MyFaces stuff can be > > > achieved than it should also be doable in Shale/Clay > > > > > > > The challenge here is that this type of PPR is coupled with > > the components. It > > would be very difficult to create this type of generic > > snap-in remoting for > > components that were not build with this support in mind > > (the shale commons validator comes to mind). > > > > Clay is a tool/utility for composing JSF views using > > something other than JSP. > > It doesn't modify or add behaivor to the components it just > > snaps them > > together. > > > > > > > So lets put our heads on the block :) > > > > > > > I wouldn't mind doing some work in this area but it would > > shift the focus > > of Shale more into component ware. > > > > > > > Hermod > > > > > > > Gary > > > > > > > > > > > -----Opprinnelig melding----- > > > Fra: Gary VanMatre [mailto:[EMAIL PROTECTED] > > > Sendt: 6. desember 2006 18:54 > > > Til: [email protected] > > > Emne: RE: CLAY: Using clay to import file in remoting method > > > > > > >From: > > > > > > > > Hi > > > > > > > > I think that this can be very useful in conjunction with > > PPR. In this way > > > one > > > > could define an outcome that was just a Clay component, where the > > > component was > > > > not a complete page, but a pagefraction. It would then be > > very easy to use > > > Ajax > > > > to put that into the div's innerhtml because it > > would(should) be a > > > complete > > > > component body. There might be implications regarding > > state that I don't > > > see > > > > though. > > > > > > > > > > This would be really interesting but there are several > > challenges. I've > > > been looking at the myfaces Trinidad components. The > > provide a parital page > > > rendering strategy that is a different from Shale's remoting. > > > > > > Shale's remoting is build for invoking logic in a backing bean and > > > delivering a XML response. It doesn't try to use the > > component tree that > > > rendered the original page. > > > > > > The Trinidad component library for PPR uses the component > > tree and hooks > > > into the entire lifecycle. A partial page request results > > in the current > > > page's component tree getting restored. The PPR is applied > > to the entire > > > component tree but the results are filtered. > > > > > > This makes a lot of sense. The page can be treated a whole > > using a browser > > > submit or individual components within the page. It is > > important that the > > > entire page is represented by the component tree. > > > > > > However, dynamically changing the tree from an action > > callback is different > > > than working with a static tree. You could potentially be > > removing a > > > component from the tree that invoked an action that is > > removing itself. > > > There are also timming issues when the component tree is > > saved within the > > > lifecycle. Normally the view state is saved after > > rendering. In JSF 1.1 > > > this is done from the ViewTag. Clay invoke the this logic > > from the view > > > handler when using full template views. > > > > > > Outside of PPR, if we are going to try to change the > > component tree in the > > > invoke application phase, we would need to find the clay > > component, clear > > > it's children, assign a new jsfid (template). We would need > > to tell the > > > state manager to save state on the tree because the next > > phase would be to > > > render the response. If we are using a actionListener > > without an action > > > outcome, the modifed tree would be rendered. However, if we > > have an action > > > outcome that matches a navigation rule, the view will be > > recreated and our > > > work is lost since the view will be rebuild for the > > original template. > > > > > > If we are going to try to use Shale's remoting, we would > > need to some how > > > restore the view by passing on the viewId in our remoting > > request, find the > > > Clay component in the tree, remove the children, set a new > > jsfid, invoke > > > rendering using a dummy response writter, save the > > component tree and return > > > the rendered markup. This only really addresses rendering. > > We would also > > > need to simulate decoding the values delivered from the > > parital page > > > request. The renderering can be decoupled from the the tree > > but decoding > > > the submitted values needs a UIViewRoot at the top to store > > queue events. > > > > > > I have an experment in the sandbox of using Trinidad PPR > > with attached > > > script to add dynamic content. It only handles rendering > > and wouldn't be > > > usefull for anything other than devlivering static content. > > > > > > Maybe you can use some ideas for here: > > > > > http://svn.apache.org/viewvc/shale/sandbox/shale-clay-trinidad > > /src/main/java > > > /org/apache/myfaces/trinidad/blank/CatalogBacking.java?view=markup > > > > > > > > > > > > > Hermod > > > > > > > > > > Gary > > > > > > > -----Original Message----- > > > > From: Ian.Priest [mailto:[EMAIL PROTECTED] > > > > Sent: Tuesday, December 05, 2006 11:22 AM > > > > To: [email protected] > > > > Subject: RE: CLAY: Using clay to import file in remoting method > > > > > > > > > > > > > > > > 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" > > > > > > > > > > > > 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? > > > &a mp;g t; > > > > 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 sni > > ppet. 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 t he r esponse 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 > > > > &g t; 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 > > > > L ist extraDetails = getExtraDetail(id); > > > > > > > > /** This works, but HTML is hard-coded into the > > > > ViewController... > > > > String html = " > > > " > > > > for( String detail: extraDetails ) { > > > > html += " " + detail + " > > > "; > > > > } > > > > html += " > > > "; > > > > > > > > // 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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > * * * * * * * * * * * * * * * * * * * * * * * * * * * * * > > * * * * * * * * > > > * > > > > > > > > This email with attachments is solely for the use of the > > individual or > > > > entity to whom it is addressed. Please also be aware that > > the DnB NOR > > > Group > > > > cannot accept any payment orders or other legally binding > > correspondence > > > with > > > > customers as a part of an email. > > > > > > > > This email message has been virus checked by the anti > > virus programs used > > > > in the DnB NOR Group. > > > > > > > > * * * * * * * * * * * * * * * * * * * * * * * * * * * * * > > * * * * * * * * > > > * > > > > > > > > > > > >
