Вы можете использовать собственное регулярное выражение для этого типа, но я рекомендую использовать правило перезаписи URL-адресов, чтобы добавить завершающую косую черту, если она отсутствует. Вы должны выбрать один URL-адрес (с символом «/» в конце или без него), в противном случае вы фактически обслуживаете одни и те же ресурсы с двумя разными адресами, и вы будете наказаны поисковыми системами и другими сканерами.
Для этого я бы использовал правило перезаписи, подобное следующему:
<rewrite match="/questions/approved/[^/]+" trailingSlash="append" />
Это приведет к тому, что сервер обнаружит отсутствие «/» в конце URL-адреса и перенаправит запрос в нужное место с «/» в конце.
Чтобы решить вашу проблему с перечислением, это немного сложнее. Обычно мы не рекомендуем привязывать значения непосредственно к перечислениям. В этом случае вы на самом деле не привязываетесь к перечислению (я предполагаю), но фактически привязываете буквальное строковое значение URL-адреса к контексту EL с областью запроса. Затем это значение извлекается где-то еще в вашем приложении, и именно здесь происходит преобразование в ENUM.
Пока не выйдет PrettyFaces 4, я рекомендую вместо этого привязать значение к местоположению String, а затем использовать метод действия для самостоятельной загрузки правильного значения, например так:
<url-mapping id="approvedQuestions">
<pattern>/questions/approved/#{params.viewOption}/</pattern>
<view-id>/approved.xhtml</view-id>
<action>#{params.loadViewOption}</action>
</url-mapping>
Если вы хотите попробовать более продвинутый инструмент для перезаписи URL, также от OCPsoft, вы можете использовать «Rewrite» (http://ocpsoft.com/rewrite/), который представляет собой инструмент для перезаписи URL-адресов на основе Java, но не имеет такой тесной интеграции с JSF.
PrettyFaces 4 будет основан на переписывании в качестве ядра, после чего все функции, которые вы используете в настоящее время, также будут доступны с возможностью делать что-то подобное, чего вы и хотите, если я не ошибаюсь:
.addRule(Join.path("/questions/approved/{viewOption}").to("/approved.xhtml")
.where("viewOption")
.matches("[^/]+/?")
.transformedBy(TrailingSlash.append())
.transformedBy(To.upperCase())
Вам нужно будет создать свои собственные преобразователи, потому что они еще не определены в библиотеке, но это общая идея. Это намного мощнее, чем то, что в настоящее время возможно с PrettyFaces, но не обеспечивает такой же интеграции навигации JSF, и его немного сложнее настроить.
Я надеюсь, что это поможет, ~ Линкольн
person
Lincoln
schedule
25.11.2011