Pon*_*oni 13 java jsp jsp-tags scriptlet
我有一个使用标签模板的页面.我的web.xml非常基础.
我只想在页面中运行一些代码.
不,我对标签或其他替代品不感兴趣.我想使用坏练习scriptlet哈哈.
到目前为止,我收到此"HTTP ERROR 500"错误:
Scripting elements ( %!, jsp:declaration, %=, jsp:expression, %, jsp:scriptlet ) are disallowed here.
Run Code Online (Sandbox Code Playgroud)
虽然我的文件看起来像:
/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/javaee
http://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>
Run Code Online (Sandbox Code Playgroud)
/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>
Run Code Online (Sandbox Code Playgroud)
的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>
Run Code Online (Sandbox Code Playgroud)
我试图修改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>
Run Code Online (Sandbox Code Playgroud)
那么,我如何在标记的JSP中使用纯scriptlet呢?
编辑#1:
理想的代码看起来像这样,在使用我的模板的页面内(如上所述''wrapper'):
<%@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>
Run Code Online (Sandbox Code Playgroud)
看到?''标签之间和内部的Scriptlet.这正是我想要实现的目标.
jon*_*one 21
在这种情况下,容器不关心scripting-invalidweb.xml中的值,因为它查看标签元数据,jsp:body其主体内容值为scriptless.所以当你看到:
Scripting elements ( %!, jsp:declaration, %=, jsp:expression, %, jsp:scriptlet ) are disallowed here.
Run Code Online (Sandbox Code Playgroud)
容器抱怨jsp:body的内容必须是无脚本的.如果要在正文中呈现scriptlet内容,可以使用scriptlet将其设置为jsp:body标记之外的页面属性,然后在主体内使用EL渲染它,如下所示:
<% request.setAttribute("stuff", object); %>
<jsp:body>
${stuff}
</jsp:body>
Run Code Online (Sandbox Code Playgroud)
小智 7
一种迟到的答案,但这应该工作:
<t:wrapper>
<jsp:attribute name="title">My nice title</jsp:attribute>
<c:set var="bodyContent">
<%
final int day_of_week = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
if (day_of_week == Calendar.SATURDAY)
{
%>
<h1>Have a nice Saturday (<%=Integer.toString(day_of_week)%>)!</h1>
<%
}
else
{
%>
<jsp:body>
<h1>Have a nice rest-of-the-week (<%=Integer.toString(day_of_week)%>)!</h1>
</jsp:body>
<%
}
%>
</c:set>
<jsp:body>
${bodyContent}
</jsp:body>
</t:wrapper>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40268 次 |
| 最近记录: |