我们是否可以在JSP中的<c:import>
语句中使用变量,例如:
<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%>
var实际上并未正常工作。不得不做以下事情而不是让它发挥作用;
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>
还没有解决变量网址问题,但是......
答案 0 :(得分:2)
您无法可靠地将 scriptlet 与taglibs / EL混合使用。它们在不同的时刻和范围内运行。您应该选择使用其中一个。自从JSP 2.0(2003年11月发布)以来, scriptlets 的使用正式discouraged,我建议完全放弃它并继续使用taglibs / EL。
以下 scriptlet
<%
// 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]}" />
以便EL中的${cc}
可用。
<c:import url="http://assets.domain.com/${cc}/includes/header_${cc}.jsp" />