带有可选参数的 Liferay 友好 URL

Posted

技术标签:

【中文标题】带有可选参数的 Liferay 友好 URL【英文标题】:Liferay friendly url with optional param 【发布时间】:2020-01-30 20:39:11 【问题描述】:

我的 URL 有一些参数,所以我使用友好的 URL 来解决 Liferays 默认生成的丑陋 URL。

这几个参数有时是空的,这意味着它不需要,但其他时候给我一些我用于查询的 ID。

示例参数不是null:

https://myliferay.com/example-portlet/-/example-portlet/search/idTable-7
//it works

例如null参数:

https://myliferay.com/example-portlet/-/example-portlet/search/idTable-null
//it works

使用null 参数它可以工作,但我不喜欢在我的网址上看到null

我想要""

https://myliferay.com/example-portlet/-/example-portlet/search/idTable-
//Doesnt work

但它不起作用,就像当参数为空时,URL 与友好的 URL 模式不匹配。

   <route>
       <pattern>/search/idTable-idTable</pattern>
       <generated-parameter name="idTable">idTable</generated-parameter>
       <implicit-parameter name="p_p_lifecycle">0</implicit-parameter>
       <!--more implicit params-->
   </route>

如何指定参数的可选性?

【问题讨论】:

不确定你从哪里得到null参数:如果你自己生成它,你能把它生成为"",例如空字符串?还是将其转换为这种表示形式? @OlafKock 已经有一个空字符串 "",但空参数与友好 URL 模式不匹配。使用null 可以。我只是做了相反的事情,我将我的 "" 更改为 null 以使其正常工作,但正如我所说,更倾向于不要在 URL 中显示 null 【参考方案1】:

就像所有友好 url 的变量都使用正则表达式一样。您可以像这样更改/覆盖此正则表达式:idTable:\d

<route>
    <pattern>/search/idTable-idTable:.*</pattern>
    <generated-parameter name="idTable">idTable</generated-parameter>
    <implicit-parameter name="p_p_lifecycle">0</implicit-parameter>
    <!--more implicit params-->
</route>

我使用.* 作为 0 个或更多字符的正则表达式,但我不知道它以后是否会给我带来问题。如果有人知道为什么使用该正则表达式不是一个好主意,请发表评论。

使用\d* 升级正则表达式以仅搜索数字或空:idTable:\d*

信息:Making URLs friendlier 7.0

【讨论】:

以上是关于带有可选参数的 Liferay 友好 URL的主要内容,如果未能解决你的问题,请参考以下文章

Liferay 友好的 URL 参数丢失

如何为带有可选 URL 参数的 GET 请求映射不同的 JSON 响应

未从 url 读取 Django 可选参数

带有可选参数的RewriteRule

如何在 NestjS 中使用可选的 url 参数

如何在liferay中制作友好的网址