Hi all, having some trouble using a PartialMarkupRendererFilter.  It's supposed 
to check a
service and add a script if the service isn't dequeued.  However the 
renderMarkup is not
getting run.  Nothing is ever logged from the filter. I'm looking for help on 
diagnosing why
the partial markup renderer filter isn't getting run.  

I can watch the PMR Filter being added inside a component via this:

    private void setupRender()
    {
        if(request.isXHR())
        {
            log.debug("ConditionalAjaxSequenceRunFilter added");
            final ConditionalAjaxSequenceRunFilter 
conditionalAjaxSequenceRunFilter = new
ConditionalAjaxSequenceRunFilter(renderSupport,ajaxService);
            
pageRenderQueue.addPartialMarkupRendererFilter(conditionalAjaxSequenceRunFilter);
        }
    }

And the code for the ConditionalAjaxSequenceFilter and it's parent:


public class ConditionalAjaxSequenceRunFilter extends RenderSupportAjaxFilter
{
    private final static Logger log =
LoggerFactory.getLogger(ConditionalAjaxSequenceRunFilter.class);

    private AjaxService ajaxService;

    public ConditionalAjaxSequenceRunFilter(final RenderSupport renderSupport, 
final
AjaxService ajaxService)
    {
        super(renderSupport);
        this.ajaxService = ajaxService;
    }

    @Override
    public void renderMarkup(final MarkupWriter writer, final JSONObject reply, 
final
PartialMarkupRenderer renderer)
    {
        if(this.ajaxService.hasMoreTasksQueued())
        {
            log.debug("Ajax tasks are queued, firing AjaxServiceSequenceRun to 
trigger a
nop");
            addInit("AjaxServiceSequenceRun");
        }
        super.renderMarkup(writer, reply, renderer);
    }
}

public class RenderSupportAjaxFilter implements PartialMarkupRendererFilter
{ 
    private final RenderSupport renderSupport; 
    private Collection<Operation> ops = new ArrayList<Operation>();

    public RenderSupportAjaxFilter(final RenderSupport renderSupport) { 
        this.renderSupport = renderSupport;
    }

    public void addInit(final String script, final String... args)
    {
        ops.add(new Operation()
        {
            @Override
            public void run()
            {
                renderSupport.addInit(script,args);
            }
        });
    }

    public void addInit(final String script, final JSONArray args)
    {
        ops.add(new Operation()
        {
            @Override
            public void run()
            {
                renderSupport.addInit(script,args);
            }
        });
    }

    public void addScript(final String script)
    {
        ops.add(new Operation()
        {
            @Override
            public void run()
            {
                renderSupport.addScript(script);
            }
        });
    }

    @Override
    public void renderMarkup(final MarkupWriter writer, final JSONObject reply, 
            final PartialMarkupRenderer renderer)
    {
        renderer.renderMarkup(writer, reply);
        for(Operation op : ops)
        {
            op.run();
        }
    }

    /**
     * Dummy interface for operations RenderSupportAjaxFilter can run
     */
    private interface Operation extends Runnable
    {
    }
}

Hoping someone can point out something obvious with why this might not run?  
The request is
an XHR which will get a MultiZoneUpdate.  I've used the RenderSupportAjaxFilter 
elsewhere,
by itself, and it's worked fine, but I'm not seeing the renderMarkup method 
ever get called
in ConditionalAjaxSequenceRunFilter inspite  of it being added to the 
PageRenderQueue.

Help!
rektide



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

Reply via email to