기본 URL은 어떻게 얻습니까?
이 구조가 있습니다.
WebContent
resources
components
top.xhtml
company
about_us.xhtml
index.xhtml
top.xhtml
안에 사용되는 부품입니다 index.xthml
및 about_us.xhtml
도.
top.xhtml
<ul>
<li><a href="index.xhtml">Home</a></li>
<li><a href="company/about_us.xhtml">About us</a></li>
...
</ul>
그래서 내 문제는 현재 페이지가 index.xhtml
구성 요소 일 때 URL을 올바르게 생성하지만 현재 페이지가 about_us.xhtml
이면 잘못된 URL을 생성한다는 것입니다. 잘못된 URL도 생성 할 것이기 때문에 상대 경로를 사용할 수 없습니다. 구성 요소가 *.xhtml
페이지 의 현재 경로를 기반으로하기 때문이라고 생각합니다 .
내가 찾은 유일한 해결책은 다음과 같습니다.
<ul>
<li><a href="${pageContext.request.contextPath}/webname/index.xhtml">Home</a></li>
<li><a href="${pageContext.request.contextPath}/webname/about_us.xhtml">About us</a></li>
...
</ul>
그러나 나는 전혀 '우아하다'고 생각하지 않습니다. 어떤 아이디어?
URL은 서버 측의 파일 구조를 기반으로 확인되지 않습니다. URL은 해당 리소스의 실제 공개 웹 주소를 기반으로 확인됩니다. 즉, 웹 서버가 아닌 웹 브라우저를 호출해야합니다.
통증을 완화하는 방법에는 여러 가지가 있습니다.
JSF EL은에 속기를 제공 ${pageContext.request}
의 맛 #{request}
:
<li><a href="#{request.contextPath}/index.xhtml">Home</a></li>
<li><a href="#{request.contextPath}/about_us.xhtml">About us</a></li>
필요한 경우 <c:set>
태그를 사용하여 더 짧게 만들 수 있습니다 . 마스터 템플릿 어딘가에 넣으면 모든 페이지에서 사용할 수 있습니다.
<c:set var="root" value="#{request.contextPath}/" />
...
<li><a href="#{root}index.xhtml">Home</a></li>
<li><a href="#{root}about_us.xhtml">About us</a></li>
JSF 2.x는 <h:link>
컨텍스트 루트 outcome
와 관련된 뷰 ID를 가져올 수 있는 을 제공하며 컨텍스트 경로와 FacesServlet
매핑을 자동으로 추가합니다 .
<li><h:link value="Home" outcome="index" /></li>
<li><h:link value="About us" outcome="about_us" /></li>
HTML은 <base>
문서의 모든 상대 URL을이 기반에 상대적으로 만드는 태그를 제공합니다 . 당신은 그것을 사용할 수 있습니다. 에 넣어 <h:head>
.
<base href="#{request.requestURL.substring(0, request.requestURL.length() - request.requestURI.length())}#{request.contextPath}/" />
...
<li><a href="index.xhtml">Home</a></li>
<li><a href="about_us.xhtml">About us</a></li>
(참고 : 이것은 EL 2.2가 필요합니다. 그렇지 않으면 JSTL을 사용하는 것이 좋습니다. 이 답변fn:substring()
도 참조하십시오 )
이것은 다음과 같이 생성 된 HTML로 끝나야합니다.
<base href="http://example.com/webname/" />
Note that the <base>
tag has a caveat: it makes all jump anchors in the page like <a href="#top">
relative to it as well! See also Is it recommended to use the <base> html tag? In JSF you could solve it like <a href="#{request.requestURI}#top">top</a>
or <h:link value="top" fragment="top" />
.
JSTL 1.2 variation leveraged from BalusC answer
<c:set var="baseURL" value="${pageContext.request.requestURL.substring(0, pageContext.request.requestURL.length() - pageContext.request.requestURI.length())}${pageContext.request.contextPath}/" />
<head>
<base href="${baseURL}" />
참고URL : https://stackoverflow.com/questions/6878275/how-get-the-base-url
'program tip' 카테고리의 다른 글
NSMutableArray-어레이가 특정 객체 유형 만 보유하도록합니다. (0) | 2020.11.14 |
---|---|
Python unittest.TestCase 실행 순서 (0) | 2020.11.14 |
emacs 쉘을 사용하는 동안 쉘을 지우는 명령 (0) | 2020.11.14 |
배열 이름없이 JSONArray를 가져 오시겠습니까? (0) | 2020.11.14 |
jquery 입력 기본값 지우기 (0) | 2020.11.14 |