JSP - использование переменной в качестве URL в c: import - PullRequest
2 голосов
/ 18 июля 2011

Есть ли способ использовать переменную в операторе <c:import> в JSP, например: <c:import url="<%=_header%>"></c:import>, где _header - это строка JSP, определенная таким образом;

// host will typically equal: uk.domain.com or fr.domain.com
String host = request.getServerName();
// cc is attempting to become the country code for the domain
String cc = host.substring(0, host.indexOf("."));

String _header = "http://assets.domain.com/" + cc + "/includes/header_" + cc + ".jsp";

Мы размещаемнесколько сайтов на нескольких рынках.Способность определять один шаблон таким образом была бы идеальной, поскольку это означало бы меньше изменений в шаблонах.К сожалению, при включении <c:import url="<%=_header%>"></c:import> серверу не удается загрузить страницу.

Но в том числе, например: <c:import url="http://assets.domain.com/uk/includes/header_uk.jsp?market=<%=cc%>"></c:import>, кажется, работает нормально ...

Любые мысли?!


Редактировать: Оказывается, переменная <%=cc%> в URL фактически не работала.Вместо этого пришлось сделать следующее, чтобы заставить его работать:

String cc = host.substring(0, host.indexOf("."));
session.setAttribute("cc", cc);

...

<c:import url="http://assets.domain.com/uk/includes/header_uk.jsp"><c:param name="market">${cc}</c:param></c:import>

Тем не менее, проблема с URL-адресом еще не решена, однако ...

1 Ответ

2 голосов
/ 21 июля 2011

Вы не можете надежно смешивать скриптлетов с taglibs / EL.Они бегают в разные моменты и выходы.Вы должны выбрать использовать один или другой.Поскольку использование скриптлетов официально не рекомендуется со времени выпуска JSP 2.0 (выпущено в ноябре 2003 г.), я бы рекомендовал полностью отказаться от него и продолжить использовать только taglibs / EL.

Следующий скриптлет

<%
    // host will typically equal: uk.domain.com or fr.domain.com
    String host = request.getServerName();
    // cc is attempting to become the country code for the domain
    String cc = host.substring(0, host.indexOf("."));
%>

может быть заменен следующим taglib / EL:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<c:set var="cc" value="${fn:split(pageContext.request.serverName, '.')[0]}" />

, так что он доступен как ${cc} в EL.

<c:import url="http://assets.domain.com/${cc}/includes/header_${cc}.jsp" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...