I figured out the problem. This will not work even though the rtexprvalue is set to true in the tld.
<nested:text onchange="function('1','2','<%=variable%>')" /> However, this will work... <% String onchangeCall = "function('1','2','" + variable + "');" %> <nested:text onchange=<%=onchangeCall%> /> I can't use a scriptlet for just a portion of the assignment. It has to be all or nothing. In the first version it just treats everything as a string. In the second version it evaluates the runtime expression.