On Mon, Oct 11, 2021 at 12:47 PM Adriaan Joubert <adriaan...@gmail.com>
wrote:

> Hi,
>

Hello, Adriaan!


> We are starting to use a library called fancytree (
> http://wwwendt.de/tech/fancytree/demo/index.html). For basic trees this
> integrates really easily with tapestry.
>
> However for tree tables the simplest way to render the trees client-side is
> to ship the contents of the tree table down in a json structure. For simple
> values this works well.
>
> Ideally we would like to have tapestry components available in the tree
> table. We could come up with complicated ways of doing this (hidden divs
> for every cell etc), but it would be easy if we could render a tapestry
> component to a string, and simply ship this client side as a field in the
> json.
>
> Does this sound feasible at all? I found
> https://github.com/uklance/tapestry-offline, but is there a simpler
> built-in way?
>

tapestry-offline is great when you want to use Tapestry to generate some
content outside of Tapestry-handled requests.

For Tapestry-handled requests, you can use its own PartialTemplateRenderer
service:
https://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/PartialTemplateRenderer.html.
It works for component and block instances.

One example taken from one of the Tapestry internal testing apps:

public class PartialTemplateRendererDemo
{

    @Inject
    @Property
    private Block someBlock;

    @Inject
    private PartialTemplateRenderer partialTemplateRenderer;

    @InjectComponent
    private BeanDisplay beanDisplay;

    @Property
    private Pojo object;

    void setupRender() {
        object = new Pojo();
        object.setDate(new Date(21342345234444L));
        object.setString(String.valueOf(System.currentTimeMillis()));
        object.setInteger((int) (System.currentTimeMillis() % 234123));
    }

    public String getServiceRenderedBlock() {
        return partialTemplateRenderer.render(someBlock);
    }

    public String getServiceRenderedComponent() {
        return partialTemplateRenderer.render(beanDisplay);
    }

    public static class Pojo
    {
        private int integer;
        private String string;
        private Date date;

        public int getInteger()
        {
            return integer;
        }

        public void setInteger(int i)
        {
            this.integer = i;
        }

        public String getString()
        {
            return string;
        }

        public void setString(String s)
        {
            this.string = s;
        }

        public Date getDate()
        {
            return date;
        }

        public void setDate(Date date)
        {
            this.date = date;
        }

    }
}

 <t:block id="someBlock">
<!-- One component that generates a good amount of markup -->
<t:beandisplay t:id="insideBlock" t:object="object"/>
</t:block>

<div id="original">
<t:delegate to="block:someblock"/>
</div>

<div id="serviceRenderedBlock">
<t:outputRaw value="serviceRenderedBlock"/>
</div>

<div id="originalBeanDisplay">
<t:beandisplay t:id="beanDisplay" t:object="object"/>
</div>

<div id="serviceRenderedComponent">
<t:outputRaw value="serviceRenderedComponent"/>



>
> If anybody has any ideas that would be great.
>
> Cheers,
>
> Adriaan
>


-- 
Thiago

Reply via email to