Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有标准的jspel函数类似于jstlc:url?_Jsp_Jakarta Ee_Jstl_El - Fatal编程技术网

有没有标准的jspel函数类似于jstlc:url?

有没有标准的jspel函数类似于jstlc:url?,jsp,jakarta-ee,jstl,el,Jsp,Jakarta Ee,Jstl,El,我发现这段代码非常难看: <a href="<c:url value='/my/path/${id}.html'/>">Title</a> 零件。JSP EL是否有任何标准函数可用,这些函数与JSTLc:out的工作相同,但看起来像: <a href="${f:context('/my/path/'.concat(id).concat('.html'))">Title</a> 或者更好: <a href="${f:cont

我发现这段代码非常难看:

<a href="<c:url value='/my/path/${id}.html'/>">Title</a>
零件。JSP EL是否有任何标准函数可用,这些函数与JSTLc:out的工作相同,但看起来像:

<a href="${f:context('/my/path/'.concat(id).concat('.html'))">Title</a>

或者更好:

<a href="${f:context}/my/path/${id}.html">Title</a>

您可以执行以下操作:

<c:url value='/my/path/${id}.html' var="myUrl"/>
<a href="${myUrl}">My Url</a>


这将把URL存储在变量
myUrl
中,该变量可用作
a
标记中的表达式。

我对该字段的研究表明,我可以将ctx参数放在web.xml中自己的EE过滤器中:

<filter>
    <filter-name>ctxFilter</filter-name>
    <filter-class>org.my.web.filter.CtxFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ctxFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<function>
    <name>ctx</name>
    <function-class>org.my.web.Ctx</function-class>
    <function-signature>java.lang.String getCtx()</function-signature>
</function>
或者在Spring拦截器中(基于我的项目框架堆栈)。这也可以通过以下方式实现:

<spring:url value="/" var="ctx" htmlEncoding="true"/>
<a href="${ctx}/path/...">...</a>

或作为:

<c:url value="/" var="ctx"/>
<a href="${ctx}/path/...">...</a>

但这些示例的第一行必须跨JSP文件复制

最后,您可以使用适当的函数实现TDL文件WEB-INF/tlds/ctx.tld

<filter>
    <filter-name>ctxFilter</filter-name>
    <filter-class>org.my.web.filter.CtxFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ctxFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<function>
    <name>ctx</name>
    <function-class>org.my.web.Ctx</function-class>
    <function-signature>java.lang.String getCtx()</function-signature>
</function>

ctx
org.my.web.Ctx
java.lang.String getCtx()
参考:

或者更好:


这是可能的:

<a href="${pageContext.request.contextPath}/my/path/${id}.html">Title</a>

如果您发现它很长,只需在主模板顶部的其他地方用一个
作为别名,如下所示

<c:set var="ctx" value="${pageContext.request.contextPath}" scope="request" />

这样你就可以在其他任何地方使用它

<a href="${ctx}/my/path/${id}.html">Title</a>

另见:

感谢您的回答,请看我的答案,我在这里添加了更多选项。有一个缺点-您必须在每个JSP文件的开头放置c:url var=value=+1相关:@BalusC感谢您的链接!我研究了关于使用基本HTML标记的问题,但发现它有很多陷阱,因为根据W3C规范,它需要绝对路径,这是不例外的,因为我们使用负载平衡代理+1该答案还显示了如何生成正确的答案。谢谢!我在基本标记中看到req.requestURL)
<c:set var="ctx" value="${pageContext.request.contextPath}" scope="request" />
<a href="${ctx}/my/path/${id}.html">Title</a>