微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用后备bean方法获取用户友好的URL时,我无法使用Rewrite API修饰我的URL Face

如何解决使用后备bean方法获取用户友好的URL时,我无法使用Rewrite API修饰我的URL Face

我正在尝试使用 OCPSoft Rewrite API 。我认为该文档还不够,SO中的问题还不足以解决我的问题。

问题1:

我将这些规则添加配置 :( CityPageMB是ViewScoped CDI Bean)

        .addRule()
            .when( Direction.isInbound().and( URL.matches("{p}{sessionID}{s}") ) )
            .perform(Redirect.temporary("{p}{s}"))
            .where("sessionID").matches("#\\.\\w+")
        .addRule()
            .when( Direction.isInbound().and(Path.matches("/presentation/city.xhtml?{cityId}")) )
            .perform( Redirect.temporary( "{userFriendlyUri}") )
            .where("userFriendlyUri").bindsTo(PhaseBinding.to( El.method("#{cityPageMB.getUserFriendlyUri}","#{cityPageMB.getUserFriendlyUri}") ).after(PhaseId.RESTORE_VIEW))
            .where("cityId").bindsTo(PhaseBinding.to( El.property("#{cityPageMB.cityId}") ).after(PhaseId.RESTORE_VIEW))
        .addRule( Join.path("{userFriendlyUri}").to("/presentation/city.xhtml?{cityId}") )
            .where("userFriendlyUri").bindsTo(PhaseBinding.to( El.method("#{cityPageMB.getUserFriendlyUri}","#{cityPageMB.getUserFriendlyUri}") ).after(PhaseId.RESTORE_VIEW))
            .where("cityId").bindsTo(PhaseBinding.to( El.property("#{cityPageMB.cityId}") ).after(PhaseId.RESTORE_VIEW));

我想要的是,当我请求此URL时:

YeJayeKhoob.com/presentation/city.xhtml?cityId=82

地址栏中的URL变为以下形式:

/YeJayeKhoob.com/presentation/تهران-شهری-در-ایران (The name of city in Persian language).

以上规则似乎无效。我看到了肮脏的网址。

问题2:

我将这些规则添加配置 :( HomePageMB是注入的ApplicationScoped CDI Bean)

.addRule()
    .when( Direction.isInbound().and(Path.matches("/")) )
    .perform( Redirect.temporary( context.getcontextpath() + "/" +  URLEncoder.encode( homePageMB.getUserFriendlyUri(),"UTF-8" ) ) )
.addRule(Join.path( context.getcontextpath() + "/" +  URLEncoder.encode( homePageMB.getUserFriendlyUri(),"UTF-8" )  ).to(context.getcontextpath() +"/"));

我想要的是,当我请求我的网站时:

YeJayeKhoob.com/

我在地址栏中看到了漂亮的URL:

YeJayeKhoob.com/به-یه-جای-خوب-خوش‌آمدید ("Welcome to YeJayeKhoob" in Persian language).

这一次,我看到了漂亮的URL,但状态404页面却很丑陋。 (如果我不使用URLEncoder.encode(),则会收到问号而不是漂亮的问号)

但是当我删除Join.path()并使用以下规则添加 pretty-config.xml 时:

<url-mapping id="home">
    <pattern value="/به-یه-جای-خوب-خوش‌آمدید" />
    <view-id value="/presentation/index.xhtml" /> 
</url-mapping>

有效。

问题是:

  1. 如何解决问题#1。
  2. 如何解决问题#2。
  3. 我需要URLEncoder.encode()还是 Rewrite 具有在后台执行此操作的方法
  4. 是否有El.method()或一般API的文档,例如oracle document

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。