문제
외부 CSS 파일을 JSF에 추가하려면 구문이란 무엇입니까?
두 가지 방법을 모두 시도했습니다. 도움이되지 않습니다.
1.
<head>
<style type="text/css">
@import url("/styles/decoration.css");
</style>
</head>
2.
<head>
<link rel="stylesheet" type="text/css" href="/styles/decoration.css" />
</head>
해결책
발룩이 당신의 대답을 할 수 있다고 생각합니다.
그러나 몇 가지 추가 점을 추가하고 싶습니다.
웹 응용 프로그램의 하위 디렉토리에서 실행 중이라고 가정하십시오. 내 경험으로서, 당신은 이것을 시도하고 싶을 수도 있습니다.<link href="${facesContext.externalContext.requestContextPath}/css/style.css" rel="stylesheet" type="text/css"/>
그만큼 '${facesContext.externalContext.requestContextPath}/'
링크를 사용하면 컨텍스트의 근본으로 즉시 돌아 오는 데 도움이됩니다.
편집하다: 시작했습니다 /
~에서 'href="/${facesContext.ex...'
. 응용 프로그램이 루트 컨텍스트에서 실행중인 경우 CSS URL이 시작합니다. //
브라우저는 CSS가 http://css/style.css
.
다른 팁
나는 첫 번째를 사용한 적이 없지만 두 번째는 구문 적으로 유효하며 기술적으로 작동해야합니다. 작동하지 않으면 상대 URL이 href
속성은 단순히 잘못된 것입니다.
상대 URL에서 선행 슬래시 /
도메인 루트를 가리 킵니다. 따라서 JSF 페이지가 예를 들어 요청하는 경우 http://example.com/context/page.jsf
, CSS URL은 절대적으로 가리킬 것입니다 http://example.com/styles/decoration.css
. 유효한 상대 URL을 알고 있으려면 JSF 페이지와 CSS 파일의 절대 URL을 알고 다른 하나에서 추출해야합니다.
CSS 파일이 실제로 http://example.com/context/styles/decoration.css
, 그런 다음 선행 슬래시를 제거하여 현재의 컨텍스트 (중 하나 page.jsp
):
<link rel="stylesheet" type="text/css" href="styles/decoration.css" />
업데이트 된 JSF 2.0 메소드는 약간 더 깔끔합니다. 대신에:
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/css/compass.css"/>
이제 이것을합니다 :
<h:outputStylesheet library="css" name="compass.css"/>
스타일 시트 리소스를 배치해야합니다 resources\css.
여기서 리소스는 웹 -INF와 같은 수준입니다.
Sergionni 문제는 두 가지라고 생각합니다.
첫째, 소위 뿌리 친척이 Balusc가 말했듯이 실제로 도메인 상대적이므로 예제에서는 http://example.com/
그리고 그렇지 않습니다 http://example.com/context/
.
따라서 지정해야합니다
<link rel="stylesheet" type="text/css" href="${request.contextPath}/styles/decoration.css" />
BTW BALUSC, 축하합니다. 이것이 제가 처음으로 이것을 정확하게 설명 할 때입니다! 나는 이것을 발견하기 위해 많은 어려움을 겪었다.
그러나 단순화하고 제안하고 싶다면 다음과 같습니다.
<link rel="stylesheet" type="text/css" href="styles/decoration.css" />
스타일 딥이 현재 페이지의 시끄럽다 고 가정하면 두 번째 문제가 발생할 수 있습니다.
그런 다음 상대 URL 방법에 들어가고,이 페이지에 앞으로 리디렉션이 아닌 앞으로 나왔습니다. 브라우저는 속이고 상대 경로를 따라갈 수 없을 수 있습니다.
이 두 번째 문제를 해결하려면 다음을 추가해야합니다.
<head>
<base href="http://${request.serverName}:${request.serverPort}${request.contextPath}${request.servletPath}" />
기본 요소는 링크보다 우선해야합니다.
기본 명령에 의해, 당신은 당신의 브라우저에 당신이 실제로 어디에 있는지 알려줍니다.
도움이되기를 바랍니다.
그리고이 놀라운 JSF 세계에서 또 다른 기괴한 일 :
페이지에서 직책 템플릿에 링크하려면 루트 상대 링크는 다음과 같은 컨텍스트를 포함하여 다음과 같습니다.
<ui:composition template="/layouts/layout.xhtml">
이것은 실제로 링크됩니다 http://example.com/context/layouts/layout.xhtml
그리고 그렇지 않습니다 http://example.com/layouts/layout.xhtml
좋아요 <a>
또는 <link>
.
장 마리 갈리엇
JSF 페이지에서 CSS를 가져 오려면 아래 코드를 시도해보십시오. 확실히 작동합니다.
<style media="screen" type="text/css">
@import "#{facesContext.externalContext.request.contextPath}/css/Ebreez.css"
</style>