如何在PrimeFaces dataTable列中使用换行符(漂亮打印)显示XML内容?

jro*_*z66 5 java jsf

如何在PrimeFaces dataTable列中使用换行符(漂亮打印)显示XML内容?

我的XML内容已经采用漂亮的打印格式,当从FacesConverter执行System.out.println时,我可以使用换行符看到它,在将字节呈现到表列之前将其转换为字符串.

这是FacesConverter的代码:

@FacesConverter(value="xmlStream")
public class ByteConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        byte[] buffer = null;
        try{
            buffer = value.getBytes("UTF-8");
        }catch(UnsupportedEncodingException e){
            buffer = value.getBytes();
        }
        return buffer;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        String text = null;
        if (value instanceof byte[]){
            try{
                text = new String((byte[])value, "UTF-8");
            }catch(UnsupportedEncodingException e){
                text = new String((byte[])value);
            }
        }
        System.out.println("text=<" + text + ">");
        return text;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我在上面做System.out.println时在控制台中看到的内容:

<linkUp>
  <ifName>eth1</ifName>
  <linkProperty>
    <name>1</name>
    <flags>42</flags>
    <extensions>
      <name>foo</name>
      <value>bar2</value>
    </extensions>
  </linkProperty>
  <linkProperty>
    <name>2</name>
    <flags>4668</flags>
    <extensions>
      <name>foo</name>
      <value>bar2</value>
    </extensions>
  </linkProperty>
</linkUp>   
Run Code Online (Sandbox Code Playgroud)

但是当数据显示在PF dataTable列上时,它显示为没有换行符的单行字符串 - 有没有办法在控制台上显示它?其他人如何在PF表中显示XML内容?

嗯,这看起来像诀窍:

.whiteSpaceClass{
    white-space: pre-wrap;
}
Run Code Online (Sandbox Code Playgroud)

但是现在我不得不处理跨越一半页面的行,因为XML太大了.我想那句老话"小心你要求的东西"适用于这里...... :)

尽管如此,只显示前几行并且能够基于单击事件展开/折叠其余部分,或者甚至在双击单元格时将其显示在框中会很好 - 问题是,我不知道如何要做到这一点,或PF是否支持... :)

Eli*_*iro 1

您可以使用可扩展的行来显示整个 XML。请参阅展示中p:rowExpansion的使用示例。