在这种情况下,容器不关心scripting-invalidweb.xml中的值,因为它正在查看其标本jsp:body内容值为的标签元数据scriptless。因此,当您看到:
Scripting elements ( %!, jsp:declaration, %=, jsp:expression, %, jsp:scriptlet ) are disallowed here.
容器抱怨jsp:body的内容必须是无脚本的。如果要在主体中呈现scriptlet内容,则可以使用scriptlet将其设置为jsp:body标记之外的page属性,然后使用EL对其内部进行渲染,如下所示:
<% request.setAttribute('stuff', object); %><jsp:body>${stuff}</jsp:body>解决方法
我有一个使用标签模板的页面。我的web.xml非常基础。
我只想在页面中运行一些代码。不,我对标签或其他替代品不感兴趣。我想用坏习惯的脚本哈哈。
到目前为止,我收到此“ HTTP ERROR 500”错误:
Scripting elements ( %!,jsp:declaration,%=,jsp:expression,%,jsp:scriptlet ) are disallowed here.
虽然我的文件看起来像:
/WEB-INF/web.xml
<?xml version='1.0' encoding='utf-8'?><web-app xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://java.sun.com/xml/ns/javaee' xmlns:web='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd' xsi:schemaLocation='http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd' version='2.5'> <welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
/WEB-INF/tags/wrapper.tag
<%@tag description='Simple Wrapper Tag' pageEncoding='UTF-8'%><%@ attribute name='title' required='true' type='java.lang.String'%><!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'><html><head><title>${title}</title></head><body> <jsp:doBody /></body></html>
index.jsp
<%@page contentType='text/html' pageEncoding='UTF-8'%><%@taglib prefix='t' tagdir='/WEB-INF/tags'%><t:wrapper> <jsp:attribute name='title'>My nice title</jsp:attribute> <jsp:body> <h1><%='some code generated text'%></h1> </jsp:body></t:wrapper>
我试图修改web.xml以显式启用它,如下所示(不起作用):
<jsp-config> <jsp-property-group><url-pattern>*.jsp</url-pattern><scripting-invalid>false</scripting-invalid> </jsp-property-group> <jsp-property-group><url-pattern>*.tag</url-pattern><scripting-invalid>false</scripting-invalid> </jsp-property-group></jsp-config>
那么,如何在标记的JSP中使用纯scriptlet?
编辑#1 :
在 使用我的模板的页面内(上面的“包装”), 理想的代码 应如下所示:
<%@page import='java.util.Calendar'%><%@page contentType='text/html' pageEncoding='UTF-8'%><%@taglib prefix='t' tagdir='/WEB-INF/tags'%><t:wrapper> <jsp:attribute name='title'>My nice title</jsp:attribute> <%final int day_of_week = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);if (day_of_week == Calendar.SATURDAY){ %> <jsp:body> <h1>Have a nice Saturday (<%=Integer.toString(day_of_week)%>)!</h1> </jsp:body> <%}else{ %> <jsp:body> <h1>Have a nice rest-of-the-week (<%=Integer.toString(day_of_week)%>)!</h1> </jsp:body> <%} %></t:wrapper>
看到?’‘标记之间和内部的小脚本。这正是我要实现的目标。