2010-01-20 4 views
4

J'ai besoin de faire un lien qui ouvre la version imprimée de la page actuelle dans un nouvel onglet. J'ai déjà un fichier css correspondant. Mais je ne sais pas comment spécifier quand ce fichier devrait être utilisé au lieu de standard.Comment ouvrir une version imprimée du site dans une nouvelle page avec jsf?

La manière la plus simple est plutôt bonne. Si j'utilisais JSP, j'ajouterais simplement le paramètre get à l'URL du lien d'impression. Est-il possible d'obtenir des résultats similaires avec jsf?

Répondre

3

Utilisez EL pour spécifier le fichier CSS dynamiquement, voici un exemple qui vérifie la présence du paramètre de demande print (donc, <h:outputLink value="page.jsf?print" target="_blank"> suffirait):

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

Vous pouvez également le récupérer comme proprerty de haricot la comme d'habitude JSF:

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

Si vous êtes sur Facelets au lieu de JSP, vous pouvez également utiliser EL unifié dans le texte du modèle:

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

Si vous avez réellement ne pas besoin d'un onglet « Aperçu avant impression »/page, vous pouvez aussi simplement spécifier l'attribut media dans le CSS link et laisser le lien/bouton appeler window.print() pendant onclick au lieu d'ouvrir dans un nouvel onglet .

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

Lorsque la page est sur le point d'être imprimé, celui spécifié par media="print" sera automatiquement utilisé à la place.

+0

J'ai déjà spécifié l'attribut media mais pour certaines raisons, le client souhaite un lien. – Roman

+0

Bien, j'ai élargi la réponse avec un peu plus de possibilités que juste '$ {param}'. – BalusC

1

Vous pouvez ajouter des paramètres à n'importe quel lien JSF à l'aide de la balise f: param.

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

Cela rend quelque chose essentiellement comme ceci:

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

Vous pouvez ajouter plusieurs params avec plus f: champs de param. Alternativement, si c'est statique, vous pouvez simplement l'ajouter dans le cadre de la sortie elle-même. Le problème, bien sûr, étant que vous ne pouvez pas faire cela et déclencher des événements côté serveur. Je n'ai pas encore compris comment faire cela à partir d'un POST et l'obtenir dans un nouvel onglet.

Questions connexes