Liferay 友好 url 带有可选参数

Liferay friendly url with optional param

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

这几个参数有时是空的,这意味着它不需要,但其他时候给我一些用于查询的 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 参数可以工作,但我不喜欢在我的 URL 上看到 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>

如何指定参数的可选性?

它就像所有友好 url 的变量一样使用正则表达式。您可以 change/override 像这样的正则表达式:{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