Search code examples
javajspstruts2ognl

JSP Unterminated <s:a> Tag With Nested OGNL


I have some OGNL I am using to populate the href element of an <s:a> to a dynamically produced URL, handled by the 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>

However, I am getting an error saying the <s:a> tag is unterminated. I have tried escaping inner speechmarks, and using single quotes but so far I have always been greeted with the same error message.

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

I can't for the life of me see what is wrong. Maybe someone with better eyes for the language will see something I cannot.


Solution

  • You cannot use JSP tags in Struts tag's attributes, but you can use OGNL there.

    Also note, that you can use OGNL only in Struts tag's attributes. And in most cases OGNL is executed once on the server, you shouldn't use nested OGNL or whatever you call it. May be this question will show you how to use you called nested OGNL.

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