Yes , you are right ,maybe using ComponentEventRequestHandler  is the best
way now . But I wish that the next version of tapestry will provide some
service to render html more easily.^_^

The AjaxComponentEventRequestHandler is the key of partial-rendering , maybe
I should  spend much more time to study it someday.

Here somebody named mindhawk provides another option:

//--------------------------------------------------------------
如果直接用renderqueue比较简单,不过可能有一些副作用,比如框架提供的安全检查和错误报告等都跳过啦。
If use renderqueue directly , it will be more simple , but has some negative
effect  , such as security checks and error reporting provided by the
framework  will be skiped .


下面给你一个简单的实现供你参考。
Here comes a simple implement for your reference

我定义了一个Tapestry的服务,负责渲染block或者rendercommand。
I define a tapestry services, for rendering the Block and Rendercommand

AppModule
=================
public static void bind(ServiceBinder binder) {
    binder.bind(RenderFacade.class, RenderFacade.class); //注册服务
}
=================


RenderFacade 
=================
package com.once.tapestry.services;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.apache.tapestry5.Block;
import org.apache.tapestry5.ContentType;
import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.internal.services.RenderQueueImpl;
import org.apache.tapestry5.ioc.LoggerSource;
import org.apache.tapestry5.ioc.services.TypeCoercer;
import org.apache.tapestry5.runtime.RenderCommand;
import org.apache.tapestry5.services.MarkupWriterFactory;
import org.slf4j.Logger;
/**
 * @author mindhawk
 * 
 */
public class RenderFacade {
    private final MarkupWriterFactory markupWriterFactory;
    private final LoggerSource loggerSource;
    private final TypeCoercer typeCoercer;
    public RenderFacade(MarkupWriterFactory markupWriterFactory,
LoggerSource loggerSource, TypeCoercer typeCoercer) {
        super();
        this.markupWriterFactory = markupWriterFactory;
        this.loggerSource = loggerSource;
        this.typeCoercer = typeCoercer;
    }
    public String render(Block block) {
        RenderCommand command = typeCoercer.coerce(block,
RenderCommand.class);
        return render(command);
    }
    public String render(RenderCommand command) {
        MarkupWriter writer = markupWriterFactory.newMarkupWriter(new
ContentType("text/html;charset=UTF-8"));
        String name = "tapestry.render.CommandRender";
        Logger logger = loggerSource.getLogger(name);
        RenderQueueImpl queue = new RenderQueueImpl(logger);
        queue.push(command);
        // Run the queue until empty.
        queue.run(writer);
        StringWriter stringWriter = new StringWriter();
        PrintWriter pw = new PrintWriter(stringWriter);
        writer.toMarkup(pw);
        return stringWriter.toString();
    }
}
==============


下面给出测试页面
Now comes the test page

RenderCommands (TML):
======================
<html title="About test"
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";
      xmlns:p="tapestry:parameter">
<body>
    <t:block t:id="b1">
      <div>Hello world!</div>
    </t:block>
    <t:block t:id="b2">
      <div>World peace!</div>
    </t:block>
    ${renderB1}<br/>
    ${renderB2}
</body>    
</html>
======================

RenderCommands (Page):
======================
package com.once.tapestry.pages;
import org.apache.tapestry5.Block;
import org.apache.tapestry5.ioc.annotations.Inject;
import com.once.tapestry.services.RenderFacade;
public class RenderCommands {
    @Inject
    private Block b1;
    @Inject
    private Block b2;

    @Inject
    private RenderFacade renderFacade;

    public String getRenderB1() {
        return renderFacade.render(b1);
    }
    public String getRenderB2() {
        return renderFacade.render(b2);
    }
}
=======================


--
View this message in context: 
http://tapestry.1045711.n5.nabble.com/tapestry-push-proof-of-concept-tp5697644p5709898.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

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

Reply via email to