JSP-tags + scriptlet. So aktivieren Sie scriptlet?
Ich habe eine Seite, die über eine tag-template.
Meine web.xml ist sehr basic.
Ich will einfach ausführen von code in der Seite.
Und Nein, ich bin nicht daran interessiert, tags oder andere alternative. Ich möchte das bad-practice-scriptlet haha.
Bisher bin ich immer das "HTTP ERROR 500" Fehler:
Scripting elements ( %!, jsp:declaration, %=, jsp:expression, %, jsp:scriptlet ) are disallowed here.
Während meine Dateien sehen so aus:
/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>
/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>
Habe ich versucht zu ändern web.xml explizit aktiviert, wie dies (funktioniert nicht):
<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>
So, wie verwende ich Reine scriptlets innerhalb meiner tag ' ed-JSP?
EDIT #1:
Ein Idealer code würde wie folgt Ausseheninnen eine Seite mit meinem template ('wrapper', wie die oben):
<%@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>
Sehen? Scriptlets zwischen & im inneren des " tags. Das ist genau das, was ich versuche zu erreichen.
InformationsquelleAutor der Frage Poni | 2011-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
In diesem Fall ist der container kümmert sich nicht um den Wert der
scripting-invalid
im web.xml weil seine Betrachtung der meta-tag-Daten fürjsp:body
die einen Körper hat-Gehalt Wert vonscriptless
. Also, wenn Sie sehen:Den container beschwert sich über den Inhalt der jsp:body, das muss skriptlosen. Wenn Sie Rendern möchten scriptlet Inhalt in den Körper, können Sie es als eine Seite Attribut außerhalb der jsp:body-tag mit einem scriptlet-und dann machen Sie es mit EL im inneren des Körpers, etwa so:
InformationsquelleAutor der Antwort jonathan.cone
Art der späten Antwort, aber dieser sollte funktionieren:
InformationsquelleAutor der Antwort bjarnij
Einfach setzen, wie bereits erwähnt, können Sie nicht tun. Es gibt keine "fix" es, es nicht getan werden kann. Tag-Dateien sind im Grunde "Simple Tags" in der JSP-Sprache. Einfache Tags sind Einfacher tags, die nicht bieten Ihnen alle Möglichkeiten eines normalen JSP-Tag, und dies beinhaltete die Handhabung von Scriptlets.
So, Sie sind nicht lästig, was, die Sie tun können, sondern Sie können auch keinen tag-Dateien, es zu tun. Was Sie gefunden haben ist, dass Sie eine der wenigen, die es zu genießen scheint die Verwendung von scriptlets in JSP, wenn die meisten von der Gemeinschaft vermieden hat.
Was ich gefunden habe ist, dass, wenn ich brauche zu greifen, um scriptlet code, den ich schließen, dass code in eigene tag-Datei, und rufen Sie dann den tag aus der JSP. Für meine Zwecke das hat ganz gut geklappt, und ich habe einige Recht anspruchsvolle tags mit nur tag-Dateien (anstelle der herkömmlichen Java).
Diese wahrscheinlich nicht für Sie arbeiten, da habe ich das Gefühl, du bist mit scriptlets als Regel, nicht als Ausnahme.
InformationsquelleAutor der Antwort Will Hartung
Basiert auf der Antwort von @bjarnij, ich fand, dass dies die beste Lösung für mich:
myJSP.jsp
Fast das gleiche wie bjarnij ist, aber ich musste
c:set
außerhalb des wrappers. Funktioniert wie ein Charme für mich 🙂InformationsquelleAutor der Antwort Hans Araya
Ich bin auf der Suche zu finden, eine echte Lösung für dieses problem, aber der workaround, den ich verwende, ist das erstellen eines old-style-tld-tag zu speichern scriptlet-fragment in die Seite ein Rahmen und drucken Sie es in einem tag.
pushpop.tld
Verwenden Sie es in jsp:
InformationsquelleAutor der Antwort Ali Shakiba
@Poni
Wenn Sie möchten, verwenden Sie die einfache if-Bedingung können wir die folgende statt scriptlet
InformationsquelleAutor der Antwort Abuthakir
Unten ist der code, die ich verwendet, um add Scriptlet wie Codierung in JSPX-Seiten.
Code funktioniert auch beim Bearbeiten von template-Seiten erstellt durch Spring-Roo.
Hinweis: die Richtige Kombination von
<jsp:declaration>,</jsp:declaration>
und<jsp:expression>
zusammen mit<![CDATA[... ]]>
funktioniert der trick.Folgenden Referenz-links:
InformationsquelleAutor der Antwort Charudatta Joshi