web-dev-qa-db-fra.com

Selon la directive TLD ou la directive d'attribut du fichier de balises, les éléments d'attribut n'acceptent aucune expression.

J'ai un projet pour lequel j'ai besoin d'afficher les détails des films dans une page HTML. Je dois suivre strictement MVC bien que je n’utilise aucun framework comme Spring ou Struts. Je ne suis pas non plus autorisé à utiliser de scriptlets, mais à utiliser JSTL et le langage d'expression. Je récupère généralement les données de la base de données, puis les définit sur un bean, puis je fais la liste de ces beans, je les passe à JSP, puis j'imprime ces détails. Mais comment y arriverais-je si je ne suis pas autorisé à utiliser JSP. Si j'utilise servlet pour extraire ces données et les définir en bean, puis en liste et les transmettre à travers le répartiteur de demandes, comment puis-je obtenir chaque bean de la liste de la page HTML?

Je ne pouvais pas faire fonctionner ce JSTL. J'utilise Netbeans 7.0 et Apache Tomcat 7.

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://Java.Sun.com/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>DVD Guru</title>
        <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
    </head>
    <body>   
     <div id="wrapper">     
        <c:set var="testing" value="blah"/>
                <c:out value="${testing}"/>
        </div>      
    </body>
</html>

Je reçois l'erreur suivante

Selon la directive TLD ou la directive d'attribut du fichier de balises, les éléments d'attribut n'acceptent aucune expression.

J'ai importé la bibliothèque JSTL 1.1 à partir des propriétés du projet . Faut-il faire autre chose?

19
ntstha

Vous devez utiliserJSP, JSTL - est simplement un ensemble de balises personnalisées et ne peut pas être utilisé séparément. Ainsi que Expression Language. Si vous n'utilisez pas de framework MVC, vous devez effectuer vous-même une partie de leur travail. S'il vous plaît jetez un oeil (si vous ne l'avez pas encore) aux modèles de conception suivants:

  1. Front Controller, Command pour une application simple
  2. Front Controller, View Helper pour une application plus complexe

UPD:

Pour résoudre le problème avec EL, essayez de corriger JSTL uri dans votre JSP afin de:

 <%@ taglib uri='http://Java.Sun.com/jsp/jstl/core' prefix='c'%>
50
udalmik
<%@ taglib uri="http://Java.Sun.com/jstl/core" prefix="c" %>

Votre URI taglib JSTL est incorrect. Celui que vous avez là est pour JSTL 1.0. Depuis JSTL 1.1, il existe un chemin supplémentaire /jsp dans l'URI de taglib, car le langage d'expression (ces éléments ${}) a été déplacé de JSTL à JSP et, par conséquent, les balises de JSTL 1.0 et 1.1 ne sont pas interchangeables.

Corrigez-le en conséquence:

<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>

Rien de plus ne doit être fait, si Netbeans est suffisamment intelligent pour générer automatiquement un web.xml compatible avec Servlet 3.0 pour Tomcat 7.

Voir également:

20
BalusC

Changez votre taglib URI JSTL comme suit:

<%@taglib prefix="c" uri="http://Java.Sun.com/jstl/core_rt" %>

Il fonctionne comme un charme.

8

Essayez d’utiliser le préfixe <%@ taglib prefix="c" uri="http://Java.Sun.com/jstl/core_rt" %> au lieu de <%@ taglib prefix="c" uri="http://Java.Sun.com/jstl/core" %>

2
charlie

Vous pouvez générer du HTML même en concaténant des chaînes. Vous pouvez également utiliser n'importe quel moteur de modèle de texte tel qu'un simple moteur JMTE (Java Minimal Template Engine) ou plus avancé tel que Velocity ou StringTemplate. En utilisant un autre moteur de gabarit, vous pouvez déclarer courageusement que vous n'utilisez pas JSP. Bien que je ne voie pas beaucoup de différence entre JSP et les autres moteurs de templates, je veux dire que votre exigence est un peu stupide.

Encore mieux: n'utilisez pas JSP utilisez JSF 2! )

2
alehro

J'ai rencontré ce problème en essayant d'utiliser une variable dans le jstl XML, je veux utiliser la variable randInt dans <x:out select/>:

<x:out select="$parsedXML/content/${randInt}/title"/>

Résolu en utilisant pageContext

<%
    Random Rand = new Random();
    int randInt = Rand.nextInt();
    pageContext.setAttribute("randInt", randInt);
%>
<x:out select="$parsedXML/content/article[$pageScope:randInt]/title"/>
0
Hunger