JSP 未终止 <s:a> 带有嵌套 OGNL 的标记

JSP Unterminated <s:a> Tag With Nested OGNL

我有一些 OGNL 用于将 <s:a> 的 href 元素填充到动态生成的 URL,由 Google UserService 处理。

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="requestUri" value="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletRequest'].requestURI}" />
<s:a href="%{#action.userService.createLoginURL("<c:out value="${requestUri}"/>");}">Sign in</s:a>

但是,我收到一条错误消息,指出 <s:a> 标记未终止。我试过转义内部语音标记,并使用单引号,但到目前为止,我总是收到相同的错误消息。

(11,71) Unterminated &lt;s:a tag

我这辈子都看不出哪里出了问题。也许对语言有更好眼光的人会看到我看不到的东西。

啊好的问题解决了。 原来 c:out 不需要输出 requestUri 的值。它可以简单地保留原样,用表达式的其余部分进行评估

您不能在 Struts 标签的属性中使用 JSP 标签,但您可以在那里使用 OGNL。

另请注意,您只能在 Struts 标签的属性中使用 OGNL 。在大多数情况下,OGNL 在服务器上执行一次,你不应该使用嵌套的 OGNL 或任何你称之为的东西。可能 this 问题会告诉你如何使用你所谓的 嵌套 OGNL

<s:set var="requestUri" value="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletRequest'].requestURI}" />
<s:a href="%{#action.userService.createLoginURL(#requestUri)}">Sign in</s:a>