自定义ui:debug

时间:2015-10-28 07:59:15

标签: jsf jsf-2 facelets

为了更好地分析组件树,我使用<ui:debug/>。 现在我想自定义此调试窗口以优化分析。

先决条件

我使用Chrome中的JavaScript控制台添加以下JavaScript代码。

(function () {
    var newscript = document.createElement('script');
    newscript.type = 'text/javascript';
    newscript.async = true;
    newscript.src = 'https://code.jquery.com/jquery-1.11.3.min.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(newscript);
})();

用于将jQuery添加到调试窗口和

hideAll = function () {
    $('dd').addClass('hidden').removeClass('visible')
};
showAll = function () {
    $('dd').addClass('visible')
};
hideAll();
$('<span class="toggle toggleButton">toggle</span>').insertBefore('dl:has(dd)');
$('#tree').find('> code').prepend('<span class="toggleButton" onclick="showAll()">showAll</span>').prepend('<span class="toggleButton" onclick="hideAll()">hideAll</span>');

$('<style type="text/css">.hidden {display: none;}.visible {display: block;}.toggleButton{padding-left: 30px;}</style>').appendTo($('head'));
$('.toggle').click(function () {
    $(this).next().children().toggleClass('visible');
}).each(function () {
    $(this).append(' (' + $(this).next().find('dd').length + ' children)')
});

用于计算组件并添加一些按钮来切换组件子项。

问题

现在我想知道,如果我能以更清洁的方式修改ui:debug - 组件。我的问题:

  • 我无法使用faces-config.xml中的以下xml代码重载ui:debug的渲染器。我也不能继承com.sun.faces.facelets.tag.ui.UIDebug,因为它是最终的,无论如何它都是实现依赖的。

    <render-kit>
        <renderer>
            <component-family>facelets</component-family>
            <renderer-type>facelets.ui.Debug</renderer-type>
            <renderer-class>com.my.CustomDebug</renderer-class>
        </renderer>
    </render-kit>
    
  • 我无法创建自定义代码并重新使用UIDebug,因为此时函数facesContext.getResponseWriter()的{​​{1}}将返回null

  • 我无法收听encodeBegin - 事件,因为打开调试窗口时不会调用此事件。但我认为,听一些事件是有希望的。

你对此有什么想法吗?

0 个答案:

没有答案