有条件地渲染JSF组件以进行打印

时间:2011-11-23 19:54:08

标签: jsf printing conditional-rendering

我只想打印我网页的某个部分(所以不打印整页)。我怎样才能在JSF中实现这一目标?

2 个答案:

答案 0 :(得分:14)

这通常由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;
}

请注意,<h:outputStylesheet media>属性仅在JSF 2.1中添加,因此如果您仍在使用JSF 2.0,请考虑升级到至少2.1(应该100%兼容,而不需要更改代码和配置webapp本身)。否则,只需使用纯HTML <link>方法。

答案 1 :(得分:0)

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