Как открыть печатную версию сайта на новой странице с jsf? - PullRequest
4 голосов
/ 20 января 2010

Мне нужно сделать ссылку, которая открывает печатную версию текущей страницы в новой вкладке. У меня уже есть соответствующий css-файл. Но я не знаю, как указать, когда этот файл следует использовать вместо стандартного.

Самый простой способ довольно хорош. Если бы я использовал JSP, я бы просто добавил параметр get в URL ссылки на печать. Есть ли способ достичь подобных результатов с JSF?

Ответы [ 2 ]

3 голосов
/ 20 января 2010

Используйте EL для динамического определения файла CSS, вот пример, который проверяет наличие параметра запроса print (таким образом, <h:outputLink value="page.jsf?print" target="_blank"> будет достаточно):

<link rel="stylesheet" type="text/css" href="${not empty param.print ? 'print.css' : 'normal.css'}" />

Вы также можете получить его как свойство бина обычным способом JSF:

<link rel="stylesheet" type="text/css" href="<h:outputText value="#{bean.cssFile}" /> " />

Если вы используете Facelets вместо JSP, то вы также можете использовать унифицированный EL в тексте шаблона:

<link rel="stylesheet" type="text/css" href="#{bean.cssFile}" />

Если вам на самом деле не нужна вкладка / страница «Предварительный просмотр», тогда вы можете просто указать атрибут media в CSS link и позволить ссылке / кнопке вызывать window.print() во время onclick вместо открытия в новой вкладке.

<link rel="stylesheet" type="text/css" href="normal.css" media="screen, handheld, projection" />
<link rel="stylesheet" type="text/css" href="print.css" media="print" />

Когда страница собирается быть напечатанной, вместо нее будет автоматически использована страница, указанная media="print".

1 голос
/ 20 января 2010

Вы можете добавить параметры получения к любой ссылке JSF, используя тег f: param.

<h:outputLink value="/somepage.xhtml" target="_blank">
   <h:outputText value="Link to Some Page"/>
   <f:param name="someparam" value="somevalue">
</h:outputLink>

Это сделает что-то вроде этого:

<a href="/somepage.xhtml?someparam=somevalue" target="_blank">Link to Some Page</a>

Вы можете добавить несколько параметров с большим количеством полей f: param. В качестве альтернативы, если он статический, вы можете просто добавить его как часть самого outputLink.

<h:outputLink value="/somepage.xhtml?someparam=somevalue" target="_blank">
   <h:outputText value="Link to Some Page"/>
</h:outputLink>

Проблема, конечно, в том, что вы не можете сделать это и инициировать события на стороне сервера. Мне еще предстоит выяснить, как сделать это с помощью POST, и получить его на новой вкладке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...