5

我有一个 jsf 应用程序,我想隐藏 url 并在页面之间切换时只在 URL 中保留应用程序的名称。

这就是我的网址:

> http://localhost:8080/PlanificationDrapageWeb/faces/admin/adminHome.xhtml
> http://localhost:8080/PlanificationDrapageWeb/faces/cuisson/Home.xhtml

这就是我一直想要的:

> http://localhost:8080/PlanificationDrapageWeb/

我怎样才能得到这个结果?

4

2 回答 2

4

正如 MaVRoSCy 所说,您可以使用 Prettyfaces 重写您的 URL。他们的文档非常有用且非常清晰。以下是要遵循的步骤(没有 Maven 依赖项方法):
1) 根据您的 JSF 版本下载最新的 jar 并将其放入您的项目类路径中。
2)添加以下内容web.xml

<filter>
    <filter-name>Pretty Filter</filter-name>
    <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Pretty Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

3)在WEB-INF一个文件下创建:pretty-config.xml这将定义你的漂亮面孔映射,就像这个:

<pretty-config xmlns="http://ocpsoft.com/prettyfaces/3.3.0" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xsi:schemaLocation="http://ocpsoft.com/prettyfaces/3.3.0
                                    http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-3.3.0.xsd">

<url-mapping id="accueil"> 
    <pattern value="/" /> 
       <view-id value="/path-to-yourpage.xhtml" />             
</url-mapping>

<url-mapping id="error"> 
    <pattern value="/" /> 
    <view-id value="/tpath-to-yourpage2.xhtml" />   
</url-mapping>
</pretty-config>

4) 现在outcome在您的托管 bean 中定义时,您应该返回pretty:idOfURLMapping. 例如:pretty:accueil将重定向到上面定义的第一个页面,通常它会显示http://localhost:8080/PlanificationDrapageWeb/为 URL。
最后,请注意,仅当它是功能要求时才应使用它。否则我会使用不带扩展名的 URL,正如 BalusC 提到的(他的方法或者如果你想要高级 Prettyfaces 功能)。
编辑
似乎 Prettyfaces 不适用于这种情况。很抱歉浪费您的时间。
现在我建议另一种可能的解决方案,因为 BalusC 的答案已被删除。
1)您创建了一个新的会话范围的托管bean,我们称之为PageManagedBean::

public class PageManagedBean {
  private String includedPage = "/pages/accueil.xhtml";
  //Setters and getters
}

2)创建一个主布局页面(Facelets模板):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:p="http://primefaces.org/ui">
<h:head>        

<ui:insert name="head"></ui:insert> 
</h:head>
<h:body>  

<div class="pagewidth">
<ui:include src="shared/header.xhtml"/>
<!-- Content -->
<div class="page_content">
    <div class="page_content_inner">
        <div class="container">                
            <ui:include id="pageLivre" src="#{pageManagedBean.includedPage}"/>                  
        </div> 

    </div>
 </div>
 <div class="page_content_footer"/>
 <ui:include src="shared/footer.xhtml"/>
</div>
</h:body>

现在,当您想要更改页面时,您只需更改 PageManagedBean.includedPage 的值。

于 2013-06-21T11:01:14.180 回答
2

尝试使用prettyFaces

PrettyFaces 是一个开源 URL 重写库,增强了对 JavaServer Faces(JSF 1.1、1.2 和 2.0)的支持,可以创建可书签的漂亮 URL。

另请参阅这个带有 Glassfish的 UrlRewriteFilter,了解如何执行此操作的更多方法。

  1. 在您的 GlassFish 实例前面使用 Apache 并使用 mod_rewrite
  2. 使用 Tuckey 的 URL 重写过滤器
于 2013-06-21T10:15:11.980 回答