【发布时间】:2012-01-05 02:30:36
【问题描述】:
我只想打印网页的特定部分(而不是整个页面)。如何在 JSF 中实现这一点?
【问题讨论】:
标签: jsf printing conditional-rendering
我只想打印网页的特定部分(而不是整个页面)。如何在 JSF 中实现这一点?
【问题讨论】:
标签: jsf printing conditional-rendering
这通常由 CSS 用display: none|block 控制。检查CSS media rules。
例如,作为默认 CSS 文件中的 @media print {}:
@media print {
#header, #footer, #menu {
display: none;
}
}
(上面的示例将隐藏 ID 为 header、footer 和 menu 的 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> 方法。
【讨论】:
<h:outputStylesheet> 上没有 media 属性。 media 属性版本是否特定?我在com.sun.faces 版本2.1.18。
html_basic.taglib.xml 中缺少<attribute> 条目引起的
这可以通过指定媒体类型通过纯 CSS 完成:http://www.w3.org/TR/CSS2/media.html
【讨论】: