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

SnI*_*IpY 2 printing jsf conditional-rendering

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

Bal*_*usC 14

这通常由CSS控制display: none|block.检查CSS媒体规则.

例如,@media print {}在默认CSS文件中:

@media print {
    #header, #footer, #menu { 
        display: none;
    }
}
Run Code Online (Sandbox Code Playgroud)

(上面的示例将使用ID隐藏HTML元素header,footer并且menu)

或者通过通用样式类:

@media screen {
    .printonly { 
        display: none;
    }
}

@media print {
    .noprint { 
        display: none;
    }
    .printonly { 
        display: block;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后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" />
Run Code Online (Sandbox Code Playgroud)
#header, #footer, #menu { 
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

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

  • [你的IDE错了](http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/h/outputStylesheet.html). (5认同)