JSF:如何在CC中的<insertchildren>之前和之后修剪空白(建议需要JSF配置参数)

时间:2018-07-24 02:34:43

标签: jsf xhtml whitespace mojarra

优先级较低,因为存在一个乏味的解决方法,即在相关CC的客户端中不使用任何空格或换行符,但这会导致难以阅读的XHTML代码。

此外,这与How to remove white spaces in JSF output?

相关但不完全相同(不是重复项):

众所周知,HTML中未剥离的换行符可能会导致较小的空格差。这可能会影响JSF复合组件,尤其是组合组件时。有一个使用注释的麻烦解决方法,因此不会出现换行符。例如,我将其用于FontAwesome图标的组件,这些组件需要并排且它们之间没有空格(在不使用浮点的情况下),例如此组件<util:helpIcon>

<cc:implementation><!--NOGAP
    --><span id="#{cc.clientId}"><!--            
        --><ui:fragment
            rendered="#{viewConfigurationManager.doShowHelpIcons}"            
            ><!--
            --><span class="fa-stack help-fa-stacked" title="#{cc.attrs.title}"><!--
                --><i style="color:white;font-size:0.9em" class="fa fa-circle fa-stack-1x"/><!--
                --><i style="color:blue;font-size:0.9em" class="fa fa-info-circle fa-stack-1x"/><!--
                --></span><!--
            --></ui:fragment><!--
        --></span><!--
    --></cc:implementation>

(请注意,必须在<cc:implementation>和第一个<span>之间使用它,否则,当您将其放置在相似的图标组件旁边时,可能会得到不需要的空间。)

但是,在使用<cc:insertChildren>时,客户端XHTML中的任何换行符都会传播,并可能导致不必要的空格。例如,在使用<util:helpLabel>并将CC标记插入<util:helpIcon>的CC <label>中:

<cc:implementation><!--NOGAP
    --><span id="#{cc.clientId}"><!--
        --><util:helpIcon
            title="#{cc.attrs.title}"
            /><!-- 
        --><h:outputLabel                 
            title="#{cc.attrs.title}"
            for="#{cc.attrs.for}"
            ><!--NOGAP
            --><cc:insertChildren/><!--
            --></h:outputLabel><!--
        --></span><!--
    --></cc:implementation>

(实际的组件实际上还包含<h:outputLabel>中的以下内容,也可以传递简单的value,但这个问题与<cc:insertChildren/>部分有关。

            value="#{fn:trim(cc.attrs.value)}"

这是没有<!--NOGAP-->技巧的相同组件:

<cc:implementation><span id="#{cc.clientId}"><util:helpIcon
            title="#{cc.attrs.title}"
            /><h:outputLabel                 
             title="#{cc.attrs.title}"
             for="#{cc.attrs.for}"
            ><cc:insertChildren/></h:outputLabel></span></cc:implementation>

如果在客户端XHTML中,我使用换行符的“ nice”格式调用以上内容,则在插入的子代和图标之间会得到多余的空格:

<util:helpLabel title="[help_text]">                            
   Points<br/>targeted<br/><em>(sum)</em>
</util:helpLabel>

为避免不必要的空间,必须对客户端XHTML进行严格的格式化:

<util:helpLabel title="[help text]">Points<br/>targeted<br/><em>(user)</em></util:helpLabel> 

这似乎不太大惊小怪,但是在许多情况下,我有一些非常复杂的标记作为子代插入,并且如果我在客户端XHTML中删除换行符,将变得很难阅读。我也有数百种这样的情况要处理,我大量使用了<util:helpLabel>组件(实际上比这里显示的要多得多)。

我尝试使用空白servlet过滤器,例如John Yeary中的这种JSF友好过滤器(类似于much older one from BalusC,但使用HTML感知库):https://github.com/bluelotussoftware/whitespace-filter。它按设计工作,但不会阻止空白出现,因为在这种情况下,不需要的空白不在标签之间,而是在<label>和某些文本之间:

<span class="fa-stack help-fa-stacked" title="[help]" style="font-size: 1.1em; padding-right: 0px;"><i style="color:white;font-size:0.9em" class="fa fa-circle fa-stack-1x"></i><i style="color:blue;font-size:0.9em" class="fa fa-info-circle fa-stack-1x"></i></span></span><label for="tableCredit:j_idt1722:" style="padding-left:0 !important; " title="[title]" class=" "> Points<br/>targeted<br/><em>(sum)</em></label>

请注意<label>和单词Points之间的空格,这是由于通过换行符而使插入的子代变为空格。 (您必须向右滚动该框,注意它故意没有换行符。)

“一个不同的天,一个 空间造成了……之前有一个彩虹 一个烦人的空间我...“

问题1:是否可以修剪<cc:insertChildren/>中的换行符或空格?

Q2:是否有任何Mojarra配置参数来避免整个问题,因为换行符成为JSF中的多余空间(似乎不是)?

如果没有,最好有一个。

0 个答案:

没有答案