사용자 지정 정규식을 사용하여이 유형을 수행 할 수 있지만 URL 재 작성 규칙을 사용하여 후행 슬래시를 추가하는 것이 좋습니다. 하나의 URL (끝에 '/'가 있거나 없거나)을 선택해야합니다. 그렇지 않으면 실제로 두 개의 주소로 동일한 자원을 제공하고 검색 엔진 및 기타 크롤러가 처벌합니다.
이 작업을 수행하기 위해, 나는 같은 재 작성 규칙을 사용합니다 다음이가 '/'URL의 끝에서 누락 될 때 서버가 감지하게됩니다, 그것은 것
<rewrite match="https://stackoverflow.com/questions/approved/[^/]+" trailingSlash="append" />
요청을 올바른 위치로 리디렉션하고 끝에 '/'를 추가하십시오.
귀하의 열거 문제를 해결하기 위해, 이것은 좀 더 복잡합니다. 일반적으로 값을 열거 형에 직접 바인딩하지 않는 것이 좋습니다. 이 경우에 실제로 열거 형에 바인딩하지는 않지만 실제로 리터럴 문자열 URL 값을 요청 범위가 지정된 EL 컨텍스트에 바인딩합니다. 이 값은 응용 프로그램의 다른 곳에서 추출되고 ENUM으로 변환됩니다. PrettyFaces 4가 나오는
까지 내가 대신과 같이, 다음 올바른 값 자신의 로딩을 수행 할 작업 방법을 사용하여, 문자열 위치에 값을 바인딩하는 것이 좋습니다 :
<url-mapping id="approvedQuestions">
<pattern>/questions/approved/#{params.viewOption}/</pattern>
<view-id>/approved.xhtml</view-id>
<action>#{params.loadViewOption}</action>
</url-mapping>
당신이 원하는 경우 OCPsoft의 고급 URL 재 작성 도구를 사용하면 Java 기반 URL 재 작성 도구 인 "재 작성"(http://ocpsoft.com/rewrite/)을 사용할 수 있지만 JSF와의 통합은 그다지 많지 않습니다.
PrettyFaces 4는 핵심으로 재 작성을 기반으로합니다. 현재 사용하고있는 모든 기능을 내가 더 이상 좋아하지 않는 기능으로 사용할 수있게됩니다. :
.addRule(Join.path("https://stackoverflow.com/questions/approved/{viewOption}").to("/approved.xhtml")
.where("viewOption")
.matches("[^/]+/?")
.transformedBy(TrailingSlash.append())
.transformedBy(To.upperCase())
아직 라이브러리에 정의되지 않았기 때문에 자신 만의 트랜스포머를 만들어야하지만 일반적인 생각입니다. 현재 PrettyFaces에서 가능한 것보다 훨씬 강력하지만 동일한 JSF 탐색 통합을 제공하지는 않으며 구성하기가 조금 까다 롭습니다.
나는 ~ 링컨
이 큰 답을 :) 작성 시간과 노력에 감사드립니다, 희망이 도움이! – LuckyLuke
감사합니다. 기꺼이 도와 드리겠습니다. – Lincoln