SORU
29 Temmuz 2011, Cuma


Nasıl taban URL almak?

Bu yapı var:

WebContent
    resources
        components
            top.xhtml

    company
        about_us.xhtml

    index.xhtml

top.xhtml index.xthml about_us.xhtml çok kullanılan bir bileşen.

top.xhtml

<ul>
    <li><a href="index.xhtml">Home</a></li>
    <li><a href="company/about_us.xhtml">About us</a></li>
    ...
</ul>

Benim sorunum geçerli sayfa index.xhtml olduğunda, bileşen doğru URL oluşturur, ancak geçerli sayfa about_us.xhtml, yanlış URL oluşturur. Ben yanlış URL çok üretmek için gidiyor çünkü göreceli yolunu kullanın. Bileşen *.xhtml sayfanın geçerli yolu dayandığı için olduğunu düşünüyorum.

Öğrendim yapabileceğim tek çözümdür:

<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>

Bence 'modern' hiç de değil. ama Herhangi bir fikir?

CEVAP
29 Temmuz 2011, Cuma


Url sunucu tarafında dosya yapısına göre çözümlenir. Url, söz konusu kaynakların gerçek kamu web adreslerine göre çözümlenir. Yani onları çağırmak için var olan tarayıcı, Web sunucusu değil.

Bu acıyı hafifletmek için çeşitli yollar vardır:

AKSARAY EL #{request} lezzet ${pageContext.request}: bir steno sunmaktadır

<li><a href="#{request.contextPath}/index.xhtml">Home</a></li>
<li><a href="#{request.contextPath}/about_us.xhtml">About us</a></li>

Gerekirse <c:set> henüz daha kısa yapmak için etiketi kullanabilirsiniz. Bir yerde ana şablonu koymak, tüm sayfaları için kullanılabilir olacak:

<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>

AKSARAY 2.x görünüm KİMLİĞİ outcome bağlam köküne göre alabilir ve bağlam yolu ve FacesServlet eşleme otomatik olarak Ekle olacaktır: <h:link> teklifler

<li><h:link value="Home" outcome="index" /></li>
<li><h:link value="About us" outcome="about_us" /></li>

HTML belgesinde tüm göreli URL bu temel göre yapar <base> etiketi bulunmaktadır. Bu işe yarayacaktır. <h:head> koy.

<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>

(not: bu EL 2.2, daha iyi fn:substring() da this answer) JSTL kullanmak istiyorum aksi gerektirir

Bu gibi oluşturulan HTML bir bitmelidir

<base href="http://example.com/webname/" />

<base> etiket bir uyarı vardır not: tüm atlama <a href="#top"> gibi sayfasında bu çapa göre de yapar! Ayrıca Is it recommended to use the <base> html tag? <a href="#{request.requestURI}#top">top</a> <h:link value="top" fragment="top" /> gibi çözmek olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • mist64

    mist64

    30 Mayıs 2006