2013-06-21 103 views
5

我有一个jsf应用程序,我想隐藏网址,并在页面之间切换时只保留URL中的应用程序名称。如何在应用程序名称后隐藏JSF URL?

那,我有网址:

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

和多数民众赞成什么,我想总是有:

> http://localhost:8080/PlanificationDrapageWeb/ 

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

+0

什么应用服务器? – MaVRoSCy

+0

我正在使用Glassfish – marouanoviche

回答

2

正如MaVRoSCy说,你可以使用Prettyfaces重写网址。他们的文档非常有用,非常清晰。下面是遵循的步骤(没有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将定义你的prettyfaces映射,像这样的:在定义outcome

<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)现在你托管的豆类,您应该返回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值。

+0

我在使用您的解决方案时遇到此错误 部署期间发生错误:加载应用程序时发生异常:java.lang.IllegalStateException:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:java.lang。 IllegalArgumentException:java.lang.ClassNotFoundException:com.ocpsoft.pretty.faces.config.PrettyConfigListener。有关更多详细信息,请参阅server.log。 C:\ Users \ hp \ Documents \ NetBeansProjects \ PlanificationDrapage \ nbproject \ build-impl.xml:294:该模块尚未部署。 – marouanoviche

+0

请在你的问题中看到我的回答关于这个错误 –

+0

谢谢你很好回答你的答案解决我的问题。 – marouanoviche

2

尝试使用prettyFaces

PrettyFaces是增强了对的JavaServer 支持的开放源代码URL重写库面孔 - JSF 1.1,1.2和2.0 - 使 创建书签,能干,漂亮的URL。

另请参阅这UrlRewriteFilter with Glassfish更多关于如何做到这一点。

  1. 接待您与Apache GlassFish实例和使用mod_rewrite
  2. 使用Tuckey's Url Rewrite Filter
+0

我发现只是解决方案需要maven但我没有使用maven ..你有一个教程使用它出Maven? – marouanoviche

+0

我们不能在web.xml中添加一些东西,并隐藏网址? – marouanoviche

+1

不幸:) – MaVRoSCy

相关问题