2012-01-04 78 views
2

我一直有這個麻煩了幾天。希望這是更清潔的,以前做過這個的人可以幫助我!如何從xhtml中的commandButton重定向到Servlet

我在tomcat 7.0服務器上運行的Eclipse中構建一個帶有JSF 2.0的webApp。並做了一個servlet我想去,但我不知道如何thandle導航規則帶我去那裏:

在我的項目中的路徑是src/com/servlets/PdfServlet,所以當我運行在服務器上的這個servlet項目可以通過url localhost:8080/miloWeb/PdfServlet來訪問。 servlet actualy爲我創建一個Pdf文件並顯示它。

反正我XHTML有這樣的:

<h:commandButton id="reportButton" action="reportPdf" styleClass="button" value="get Report" ></h:commandButton> 

我的臉,配置導航規則是這樣的:

<navigation-rule> 
    <navigation-case> 
     <from-outcome>reportPdf</from-outcome>  
     <to-view-id>/miloWeb/PdfServlet</to-view-id> 
     <redirect /> 
    </navigation-case> 
</navigation-rule> 

,但它需要我miloWeb /面/ miloWeb/PDFServlet中,我需要它把我帶到了miloWeb/PdfServlet。

關於如何完成這個或其他路線或做到這一點的任何想法?

回答

5

首先,導航規則僅適用於JSF。他們無法幫助您導航到一個servlet。

JSF2.0中faces-config中的導航規則是多餘的。它們由JSF隱式處理,基於操作方法返回的值(結果)。 "?faces-redirect=true"可以附加到重定向結果的末尾。

我不知道你的功能要求是什麼。您正試圖混合使用JSF和servelts,這不是一個好主意。

<h:commandButton id="reportButton" action="reportPdf" 

action的屬性的值必須是解析爲在一些JSF託管bean的方法的方法表達。例如action="#{controllerBean.axnMethod()}"

當調用axnMethod()時,一個選項是從那裏重定向到servlet。的東西如下:

FacesContext.getCurrentInstance().getExternalContext().redirect("url"); 

或者要求僅僅是調用Servlet然後在視圖,只是把一個鏈接與調用servlet的URL。

+1

我這樣做了,但是使用context.getExternalContext()。dispatch(url);非常感謝Hlep Bhesh – Myy 2012-01-06 03:11:49

+0

歡迎您。 – 2012-01-06 05:15:15

0

JSF在Faces servlet中執行,並且標準導航只能導航到jsf視圖。改爲打開一個servlet。另一種選擇是避免使用servlet,並從這裏描述的動作方法提供PDF文件:http://www.winstonprakash.com/articles/jsf/file_download_link.htm

+0

看起來像一個HTML標記已從我的評論中刪除。我的意思是你可以使用h:outputLink,因爲它允許導航到JSF servlet之外的特定url。 – 2012-01-04 19:41:25