是否有JSTL EL(表达式语言)等同于<c:url />

JBC*_*BCP 8 jsp jstl el

我们使用tomcat urlrewrite插件来重写出站URL和入站URL.为此,您需要使用JSTL标记.

这适用于干净的网址和i18n,但它会产生丑陋的代码,包括标签内的标签,如下所示:

<link href='<c:url value="/content/bootstrap/css/bootstrap.css" />' rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

要么:

<a href='<c:url value="/nextPage.jsp"/>' />Next Page</a>
Run Code Online (Sandbox Code Playgroud)

一种替代方法是使用变量,如下所示:

<c:url value="/nextPage.jsp" var="nextPageUrl"/>
<a href='${nextPageUrl}' />Next Page</a>
Run Code Online (Sandbox Code Playgroud)

这真的很干净,但很冗长.

是否有表达式语言友好的方式来做到这一点?

我有点希望得到类似的东西:

<a href='${url "/nextPage.jsp}' />Next Page</a>
Run Code Online (Sandbox Code Playgroud)

谢谢.

JBC*_*BCP 0

我最终想出的解决方案是使用自定义标签来解决CSS和JS的问题。当然,类似的解决方案也可以应用于标签,尽管我还没有这种需要。

<my:csslink url="/css/custom.css" />
<my:script url="/script/myscript.js" />
Run Code Online (Sandbox Code Playgroud)

CSS 标签看起来像这样,Javascript 标签显然非常相似:

<%@tag language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@attribute name="url" required="true" type="java.lang.String" description="the absolute (to the webapp) path of the css file"%>
<c:url var="encUrl" value='${url}' />
<link href='${encUrl}' rel='stylesheet' />
Run Code Online (Sandbox Code Playgroud)

不要忘记在 jsp 中导入标签:

<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
Run Code Online (Sandbox Code Playgroud)

在某些情况下,自定义 EL 解决方案会更清晰,但如果您想添加对其他参数或属性的支持,标签可能是最佳选择。