2010-01-20 67 views
4

我需要製作一個鏈接,在新標籤頁中打開當前頁面的打印版本。我已經有通訊員的CSS文件。但我不知道如何指定何時使用此文件而不是標準。如何使用jsf在新頁面中打開網站的打印版本?

最簡單的方法是相當不錯的。如果我使用JSP,我只需將get參數添加到打印鏈接URL。有什麼辦法可以通過jsf獲得類似的結果嗎?

回答

3

使用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'}" /> 

您還可以檢索它作爲一個bean proprerty的通常的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}" /> 

如果你真的不需要一個「打印預覽」選項卡/頁面,那麼你也可以只指定在CSS linkmedia屬性,讓在新標籤中onclick,而不是打開鏈接/按鈕調用window.print()

<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"指定的一個將自動被代替使用。

+0

我已經指定了媒體屬性,但由於某些原因客戶想要鏈接。 – Roman 2010-01-20 19:10:31

+0

很好,我用幾個更多的可能性擴展了答案,而不僅僅是'$ {param}'。 – BalusC 2010-01-20 19:13:08

1

您可以使用f:param標記將獲取參數添加到任何JSF鏈接。

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

這將基本上呈現這樣的事情:PARAM領域:

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

你可以用多個F添加多個PARAMS。或者,如果它是靜態的,則可以將其作爲outputLink本身的一部分添加。

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

這個問題當然是因爲你無法做到這一點並觸發服務器端事件。我還沒有弄清楚如何從POST返回並在新選項卡中獲取它。