无法确定格式不正确的原因

时间:2014-08-18 17:44:16

标签: java html css jsf text-formatting

从MS Word文档复制粘贴文本时,文本格式会中断。但是,如果在“文本”框中键入相同的文本,则不会发生此问题。

JSF inputText标记用于接收包含最多140个字符的文本。然后在服务器端处理此文本以删除空白并插入HTML< br>当文本中的单词太大而浏览器无法包装时标记。

然后使用< li>内的outputText标记在JSF页面上显示文本。元件。

<ul> 
    <hx:viewFragment id="msgFragPrn" rendered="#{pc_Pagecode.enabled}"> 
        <f:verbatim><li class="datarowPrintOnly"><span class="row"></f:verbatim>
        <h:outputText value="Message"></h:outputText>
        <f:verbatim></span></f:verbatim>
        <h:outputText value=":" styleClass="printOnly"></h:outputText>
        <h:outputText  escape="false" styleClass="printInline" value="#{pc_Pagecode.transObj.formattedMsg}">
        </h:outputText>
        <f:verbatim> </li></f:verbatim>
     </hx:viewFragment> 
</ul>

使用的CSS样式

.printInline{display:inline-block; word-wrap:break-word; padding-left:2px; }
.printOnly{padding-right:4px; width:2%; vertical-align:top;}

以上代码和样式允许以下显示

在文本框中输入文字时的显示格式

  • 消息:在文本框中键入文本时,文本显示正确。但是,从Word文档复制粘贴文本时,情况并非如此。

在文本框中输入文字时的显示格式

  • 消息:
    在文本框中键入文本时,文本显示正确。但是,从Word文档复制粘贴文本时,情况并非如此。

由于两个文本输入之间的唯一区别可能是CR / LF /不可见字符。我尝试了以下的事情

String whitespace_chars = "" /* dummy empty string for homogeneity */
+ "\\u0009" // CHARACTER TABULATION 
                            + "\\u000A" // LINE FEED (LF) 
                            + "\\u000B" // LINE TABULATION 
                            + "\\u000C" // FORM FEED (FF) 
                            + "\\u000D" // CARRIAGE RETURN (CR) 
                            + "\\u0085" // NEXT LINE (NEL) 
                            + "\\u001C" // FILE SEPARATOR. 
                            + "\\u001D" //  GROUP SEPARATOR. 
                            + "\\u001E" // RECORD SEPARATOR. 
                            + "\\u001F" //  UNIT SEPARATOR. 
                            + "\\u00A0" // NO-BREAK SPACE 
                            + "\\u1680" // OGHAM SPACE MARK 
                            + "\\u180E" // MONGOLIAN VOWEL SEPARATOR 
                            + "\\u2000" // EN QUAD 
                            + "\\u2001" // EM QUAD 
                            + "\\u2002" // EN SPACE 
                            + "\\u2003" // EM SPACE 
                            + "\\u2004" // THREE-PER-EM SPACE 
                            + "\\u2005" // FOUR-PER-EM SPACE 
                            + "\\u2006" // SIX-PER-EM SPACE 
                            + "\\u2007" // FIGURE SPACE 
                            + "\\u2008" // PUNCTUATION SPACE 
                            + "\\u2009" // THIN SPACE 
                            + "\\u200A" // HAIR SPACE 
                            + "\\u2028" // LINE SEPARATOR 
                            + "\\u2029" // PARAGRAPH SEPARATOR 
                            + "\\u202F" // NARROW NO-BREAK SPACE 
                            + "\\u205F" // MEDIUM MATHEMATICAL SPACE 
                            + "\\u3000" // IDEOGRAPHIC SPACE 
            ;

使用模式&amp; Matcher和replaceAll方法用“”(空格)替换了所有上述事件。但是Matcher.find()找不到上述字符的任何出现。

然后我尝试用“”替换下面的出现。

"\\r\\n|\\r|\\n" 

当文本是140个字符的连续字符串,没有空格或文本由长度超过50个字符的单词组成时,也会观察到上述问题。在这种情况下,我使用[\ s +]作为分隔符对文本进行标记,并插入&lt; br /&gt;。在插入break标签后的两种情况下,显示格式都是预期的。

我仍然想知道在复制粘贴文本时打破显示格式的原因是什么。有什么指示吗?

1 个答案:

答案 0 :(得分:0)

唯一可行的是插入&lt; br /&gt;当文本内容大于特定长度时,在文本中标记。