java - 无法确定格式不当的原因

标签 java html css jsf text-formatting

从 MS Word 文档复制粘贴文本时,文本格式会中断。但是,当在文本框中输入相同的文本时,不会出现此问题。

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

然后使用

  • 元素内的 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 
                ;
    

    使用 Pattern & Matcher 和 replaceAll 方法将上述所有匹配项替换为“”(空格)。但是 Matcher.find() 找不到上述字符的任何匹配项。

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

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

    当文本是 140 个字符的连续字符串且没有空格时,或者当文本包含长度超过 50 个字符的单词时,也会出现上述问题。在这种情况下,我使用 [\s+] 作为分隔符标记文本并插入
    。插入 break 标记后,两种情况下的显示格式都符合预期。

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

  • 最佳答案

    唯一可行的是当文本内容大于一定长度时在文本中插入
    标签。

    关于java - 无法确定格式不当的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369083/

    相关文章:

    java - 尝试为 SQLite 数据库创建表时出现无法识别的语句

    javascript - 如何在标题外部显示一个部分或一个 div,恰好在粘性菜单下?

    PHP switch 语句始终采用默认值

    html - 在CSS中获得相同的形状

    javascript - 尝试从 JSON 加载单词时出错

    html - 如果屏幕高度太小,粘性页脚不起作用

    javascript - 带计时器和指示器的jquery幻灯片放映

    java - adb连接错误:EOF (new in android )

    java - 验证实体而不保存它

    java - 无法在 Play 项目中加载库 'libtesseract302'