为了更好地分析组件树,我使用<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
- 事件,因为打开调试窗口时不会调用此事件。但我认为,听一些事件是有希望的。
你对此有什么想法吗?