0
  1. 我可以配置 PrettyFaces / Rewrite 以将所有传入的 URL 请求映射到一页吗?
  2. 那么如何从 PrettyFaces / Rewrite 获取域名后的完整 URL 路径?也许有一些注释或像这样的{URLPATH}?看起来像这样,但也许此时有其他解决方案

我需要:从所有请求中:

"/../../../*......." or/and "/a/b/c/*/*/*/.." or/and "/{param}/**" or/and "/{param}/{param2}/{param3}/**/**" 

映射到一个 JSF 页面。

像这样的东西:

<url-mapping id="pages">
    <pattern value="/**" />
    <view-id value="/pages.xhtml" />
</url-mapping>


在 Spring MVC 中,我这样做就像“/україна/452454/45/4774/7744/longpath.html”:

@RequestMapping(value = {"/**"},method=RequestMethod.GET)
public @ResponseBody String info(HttpServletRequest request) {
    String remainingPaths = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    return "<H1>Good Work</H1><br/>" + remainingPaths;
}

在输出我有:

<H1>Good Work</H1><br/>/україна/452454/45/4774/7744/longpath.html

如何从 PrettyFaces / Rewrite 获得相同的效果?

4

1 回答 1

1

我认为Rewrite是您正在寻找的解决方案。首先,您需要使用此处概述的步骤从“PrettyFaces 3.x”升级到“重写配置 PrettyFaces”:PrettyFaces Homepage。这应该是一个直接替换,不需要您进行额外的配置。

升级并验证您的应用程序使用“Rewrite Config Prettyfaces”模块正常工作后,您需要在新的 Rewrite Configuration Provider 中创建规则(按照 Rewrite Homepage 上的步骤操作):

package com.example;
public class AllPagesToOneViewProvider extends HttpConfigurationProvider
{
   @Override
   public int priority()
   {
     return 0;
   }

   @Override
   public Configuration getConfiguration(final ServletContext context)
   {
     return ConfigurationBuilder.begin()
       .addRule(Join.path("/{all}").to("/pages.xhtml"))
       .where("all").matches(".*");
    }
}

笔记:

^^ 确保在您的 META-INF/服务中注册此配置提供程序(如说明中所述!)

我还在下一版本的 Rewrite 中添加了一个支持超级通配符的问题,这意味着您将能够使用 Join Annotation 而不是只为这条规则创建配置提供程序(但是,我认为您会发现配置 API 很有用。)

于 2013-06-17T16:19:59.440 回答