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 +]作为分隔符标记了文本并插入了
    。在插入中断标签后的两种情况下,显示格式均符合预期。

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

  • 最佳答案

    唯一可行的方法是,当文本内容大于特定长度时,在文本中插入
    标记。

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

    相关文章:

    Java FX 为什么我应该使用 SimpleProperties 而不仅仅是普通的 nativ 变量?

    java - 为什么在执行 XSLT 转换时出现 "Premature End of File"错误?

    html - H2出现在div的一半

    javascript - 自动滚动到消息底部

    html - CSS Bootstrap 导航栏间距问题

    java - 检测 Web 应用程序和桌面应用程序中的漏洞

    java - Java中数组的部分副本

    php - 未捕获的ReferenceError:未定义getWidget

    javascript - 为 Web 压缩和调整图像大小

    javascript - 当其他div具有相同的类时,如何要求jquery在一个div上应用