Java 类型函数中的方法replace(String,String,String)不适用于参数(StringBuffer,String,String)

Java 类型函数中的方法replace(String,String,String)不适用于参数(StringBuffer,String,String),java,jstl,Java,Jstl,这是我的jsp文件: <%@ page contentType="text/plain" %> <%@ page pageEncoding="UTF-8"%><%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <c:out va

这是我的jsp文件:

<%@ page contentType="text/plain" %>
<%@ page pageEncoding="UTF-8"%><%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:out value="${fn:replace(pageContext.request.requestURL, pageContext.request.requestURI, '')}" /><c:out value="${model.uri}" />
我尝试过pageContext.request.requestURL.toString(),但toString()显然不是一个方法。有什么建议吗?

绝对是正确的方法。问题是使用EL调用它。您可以使用
将其转换为字符串,如中所述

${pageContext.request.requestURL}
也就是说,我认为有一种更好的方法可以获取您想要的输出字符串,而不使用
fn:replace

尝试
“”+pageContext.request.requestURL
而不是
pageContext.request.requestURL.toString()


应该行。

Hm,我键入答案时,
行不在那里。@BalusC你相信我不是从你的答案中得到的,而是从skaffman(我链接的那一个)那里得到的吗?+1@巴卢斯克,我本来也要+1你,但是你删除了你的答案。@Asah:我不喜欢重复的答案。Matt在宽限期内编辑了正确的答案,所以我删除了我的答案。顺便说一下,这个问题不会在我的环境中出现。它执行得非常好。我使用的是JSTL1.2。您正在使用JSTL1.1吗?有关下载链接,请查看我们的JSTL信息页面是的,我正在使用1.1,我可能需要考虑升级。您也可以尝试使用String.toString(…)将其包围起来
The method replace(String, String, String) in the type Functions is not applicable for the arguments (StringBuffer, String, String)
<c:set var="url">${pageContext.request.requestURL}</c:set>
<c:out value="${fn:replace(url, pageContext.request.requestURI, '')}" />
pageContext.request.requestURL.toString()