Ok, 2 ans plus tard ... c'est parti!
COMMENT créer notre propre TAG PROLONGER UN CLASSIQUE AVEC UN NOUVEAU AU PRINTEMPS ATTRIBUTS MVC 3
1. Créez votre propre taglib.tld
Vous devez créez votre propre fichier TLD. Là, vous allez ajouter le nouvel attribut que vous allez utiliser. La meilleure option est copier/coller spring-form.tld. Vous pouvez le trouver dans le paquet spring-mvc (org.springframework.web.servlet-.jar) .Rechercher dans le dossier META-INF.
N'hésitez pas à le placer directement dans WEB-INF ou dans un sous-dossier. Je l'ai mis en /WEB-INF/tld
.
Recherchez maintenant dans votre nouveau fichier TLD le tag que vous allez modifier. Je modifié balise d'entrée, donc je dû rechercher:
...
<tag>
<description>Renders an HTML 'input' tag with type 'text' using the bound value.</description>
<name>input</name>
<tag-class>org.domain.tags.CustomTags</tag-class>
<body-content>empty</body-content>
<attribute>
...
Copier à partir de et le coller ci-dessous. Changez le nouveau tag pour votre propre nom. Le mien était monInput. Alors maintenant, nous avons ceci:
...
<tag>
<description>Renders an HTML 'input' tag with type 'text' using the bound value.</description>
<name>input</name>
<tag-class>org.springframework.web.servlet.tags.form.InputTag</tag-class>
<body-content>empty</body-content>
<attribute>
...
</tag>
<tag>
<description>Renders an HTML 'input' tag with type 'text' using the bound value.</description>
<name>myInput</name>
<tag-class>org.domain.tags.CustomTags</tag-class>
<body-content>empty</body-content>
<attribute>
...
</tag>
RÉSUMÉ: maintenant j'ai un nouveau fichier appelé taglib.tld ici: /WEB-INF/tld/taglib.tld
. attention à la <tag-class>
partie
Dans votre nouvelle balise ajouter un nouvel attribut appeler (copier/coller un autre) rendre.
<attribute>
<description>Enables/Disables the field rendering</description>
<name>render</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.Boolean</type>
</attribute>
Maintenant, nous avons créé le fichier taglib dont nous avons besoin. Voyons voir comment l'utiliser.
2.Créez votre propre gestionnaire
Maintenant, nous allons créer la classe qui va gérer le nouvel attribut (et les classiques). J'ai créé la classe CustomTags.java en el paquete org.domain.tags. Voyons d'abord le code et l'expliquer:
package org.domain.tags;
import javax.servlet.jsp.JspException;
import org.springframework.web.servlet.tags.form.InputTag;
import org.springframework.web.servlet.tags.form.TagWriter;
public class CustomTags extends InputTag {
private static final long serialVersionUID = 1L;
private boolean render;
public boolean isRender() {
return render;
}
public void setRender(boolean render) {
this.render = render;
}
protected int writeTagContent(TagWriter tagWriter) throws JspException {
if(render){
super.writeTagContent(tagWriter);
return SKIP_BODY;
}
else
return SKIP_BODY;
}
}
Bien sûr, si nous allons ajouter quelques fonctionnalités à la balise d'entrée du framework Spring, nous devons l'étendre afin de mantenir le reste des caractéristiques. Comme vous pouvez le voir, nous venons d'ajouter l'attribut privé render comme booléen (dans taglib.tld nous le mettons aussi).
Nous avons ajouté à la getter et setter méthodes pour cet attribut.
Enfin nous avons remplacer la méthode writeTagContent afin que JSP fasse ce que nous voulons. Dans ce cas, nous voulons que le champ de saisie soit affiché si le rendu est vrai. Sinon, le champ ne peut pas être affiché. C'est pourquoi nous appelons le writeTagContent de la classe parente.
Si nous devons apporter des modifications au comportement du tag, cette méthode est le bon endroit pour le faire.
3. En utilisant la nouvelle étiquette.
Maintenant nous avons seulement besoin d'un JSP avec un formulaire pour utiliser le nouveau tag. Il est facile de le faire, donc je laisse seulement ici le code:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix = "newtags" uri = "/WEB-INF/tld/taglib.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring 3.0 MVC Series: Welcome World</title>
</head>
<body>
<h1>User Data</h1>
Please, fill the fields with your information:<br>
<newtags:form name="userForm" id="userForm" modelAttribute="userForm" action="user.htm" method="POST">
Name: <newtags:myInput type="text" name="textName" path="userName" render="true" size="50" /><newtags:errors path="userName" /><br>
Surname: <newtags:myInput type="text" name="textSurname" path="userSurname" render="true" size="50" /><newtags:errors path="userSurname" /><br>
Age: <newtags:myInput type="text" name="textAge" path="userAge" render="true" size="2" /><newtags:errors path="userAge" /><br>
Example: <newtags:myInput type="text" name="textSurname" render="false" size="20" path="userSurname"/>
<hr>
<input type="submit" value="Next" />
</newtags:form>
</body>
</html>
Maintenant, au lieu d'appeler springframework tld, nous appelons notre propre TLD. Comme vous pouvez le voir le seul champ qui ne va pas être montré est Exemple un.
Bonne chance à tous!
Comment puis-je faire html5