Условно отображать компоненты JSF для печати

Я хочу напечатать только определенную часть моей веб-страницы (а не всю страницу). Как я могу добиться этого в JSF?


person SnIpY    schedule 23.11.2011    source источник


Ответы (2)


Обычно этим управляет CSS с помощью display: none|block. Проверьте правила CSS для мультимедиа.

Например, как @media print {} внутри файла CSS по умолчанию:

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

(в приведенном выше примере будут скрыты элементы HTML с идентификаторами header, footer и menu)

Или через общий класс стиля:

@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% совместим без каких-либо изменений кода и конфигурации в самом веб-приложении). В противном случае просто используйте простой подход HTML <link>.

person BalusC    schedule 23.11.2011
comment
Моя IDE сообщает мне, что атрибут media отсутствует в <h:outputStylesheet>. Является ли версия атрибута media конкретной? У меня com.sun.faces версия 2.1.18. - person Jasper de Vries; 22.02.2013
comment
Ваша IDE неверна . - person BalusC; 22.02.2013
comment
Да нормально работает. Я отправлю Netbeans отчет об ошибке. +1 - person Jasper de Vries; 22.02.2013
comment
@JasperdeVries Я полагаю, что это вызвано отсутствием записи <attribute> в html_basic.taglib.xml - person user123444555621; 22.07.2014

Это можно сделать с помощью чистого CSS, указав тип носителя: http://www.w3.org/TR/CSS2/media.html

person andbi    schedule 23.11.2011