2012-01-04 43 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