【问题标题】:Conditionally render JSF components for printing有条件地渲染 JSF 组件以进行打印
【发布时间】:2012-01-05 02:30:36
【问题描述】:

我只想打印网页的特定部分(而不是整个页面)。如何在 JSF 中实现这一点?

【问题讨论】:

    标签: jsf printing conditional-rendering


    【解决方案1】:

    这通常由 CSS 用display: none|block 控制。检查CSS media rules

    例如,作为默认 CSS 文件中的 @media print {}

    @media print {
        #header, #footer, #menu { 
            display: none;
        }
    }
    

    (上面的示例将隐藏 ID 为 headerfootermenu 的 HTML 元素)

    或通过通用样式类:

    @media screen {
        .printonly { 
            display: none;
        }
    }
    
    @media print {
        .noprint { 
            display: none;
        }
        .printonly { 
            display: block;
        }
    }
    

    然后,您将styleClass="noprint" 添加到您希望在打印中隐藏的内容中,并将styleClass="printonly" 添加到您希望仅在打印中显示的内容中。

    您也可以将打印特定的 CSS 放在其自己的样式表文件中,并使用 <link media="print"><h:outputStylesheet media="print"> 引用它,如下所示:

    <link rel="stylesheet" href="#{request.contextPath}/css/print.css" media="print" />
    <!-- Or -->
    <link rel="stylesheet" href="#{resource['css/print.css']}" media="print" />
    <!-- Or -->
    <h:outputStylesheet name="css/print.css" media="print" />
    
    #header, #footer, #menu { 
        display: none;
    }
    

    应该注意&lt;h:outputStylesheet media&gt; 属性只添加在 JSF 2.1 中,所以如果您仍在使用 JSF 2.0,请考虑升级到至少 2.1(应该 100% 兼容,无需在 webapp 本身中进行任何代码和配置更改)。否则,请使用纯 HTML &lt;link&gt; 方法。

    【讨论】:

    • 我的 IDE 告诉我 &lt;h:outputStylesheet&gt; 上没有 media 属性。 media 属性版本是否特定?我在com.sun.faces 版本2.1.18
    • 是的,它工作得很好。我将向 Netbeans 发送错误报告。 +1
    • @JasperdeVries 我想这是由于html_basic.taglib.xml 中缺少&lt;attribute&gt; 条目引起的
    【解决方案2】:

    这可以通过指定媒体类型通过纯 CSS 完成:http://www.w3.org/TR/CSS2/media.html

    【讨论】:

      猜你喜欢
      • 2016-05-06
      • 2012-08-31
      • 2012-11-28
      • 2018-09-13
      • 2019-02-18
      • 1970-01-01
      • 2013-01-24
      • 2018-12-20
      • 1970-01-01
      相关资源
      最近更新 更多