未在自定义标记调用中评估JSP代码

时间:2014-01-24 18:08:28

标签: jsp escaping jstl evaluation custom-tags

我是JSP和JSTL的新手,并且遇到一个问题,即当<%= .. %>块中的代码仅形成自定义标记属性的 part 时,其中的代码未被评估

<myForm:text myBean="${myBean}" inputClass="form-class" inputName="pageNumber"
    label="Go to page" size="1"
    onkeypress="javascript:checkKey(<%= formName %>, '<%=listRequestFor%>', <%=recPerPage%>, <%=numPages%>);" 
    onkeydown="javascript:numbersOnly();" 
    onchange="javascript:goToPage(<%=formName%>, '<%=listRequestFor%>', <%=recPerPage%>, <%=numPages%>);" />

这会产生类似以下内容的HTML:

<label for="" class="">
    Go to page 
</label>

<input type="text" id="" class="form-control" name="pageNumber"
    value="" size="1"     
    onkeypress="javascript:checkKey(&lt;%= formName %&gt;, '&lt;%=listRequestFor%&gt;', &lt;%=recPerPage%&gt;, &lt;%=numPages%&gt;);" 
    onkeydown="javascript:numbersOnly();" 
    onchange="javascript:goToPage(&lt;%=formName%&gt;, '&lt;%=listRequestFor%&gt;', &lt;%=recPerPage%&gt;, &lt;%=numPages%&gt;);">

看起来<%= .. %>标签正在被转义,因此在评估自定义标签之前不评估JSP表达式......任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

作为一个肮脏的黑客(不低于JSP应得)我已经定义了可以在传递给自定义标记之前进行评估的变量:

<%
String onkeypress = "javascript:checkKey("+formName+", '"+listRequestFor+"', "+recPerPage+", "+numPages+");";
String onchange = "javascript:goToPage("+formName+", '"+listRequestFor+"', "+recPerPage+", "+numPages+");";
%>

<myForm:text myBean="${myBean}" inputClass="form-class" inputName="pageNumber"
    label="Go to page" size="1"
    onkeypress="<%= onkeypress %>" 
    onkeydown="javascript:numbersOnly();" 
    onchange="<%= onchange %>" />

这似乎已经解决了这个问题,虽然理解为什么/正在发生什么会很好