Question

J'ai une JSP qui utilise les balises Spring: form pour lier les contrôles à un objet de commande.

Je voudrais le modifier comme suit: si [une condition est vraie] que d'afficher les contrôles; sinon, affichez simplement le texte. (Exemples: si l'utilisateur est un administrateur, affichez les commandes, sinon, affichez simplement le texte. Si le contenu est toujours ouvert pour modification, affichez les commandes, sinon, affichez le texte.)

En d'autres termes, je veux ceci:

<c:choose>
     <c:when test="SOME TEST HERE">
          <form:input path="SOME PATH" />
     </c:when>
     <c:otherwise>
          <p>${SOME PATH}</p>
     </c:otherwise>
</c:choose>

Mais je veux un moyen facile de créer cela pour chaque domaine (il y en a beaucoup).

Si je crée une balise personnalisée pour générer le texte ci-dessus (en indiquant "SOME PATH"), les balises personnalisées Spring seront-elles liées?

Je suppose que ce que je demande vraiment, c'est: puis-je créer des tags personnalisés qui génèrent des tags personnalisés Spring qui puis sont liés? Ou est-ce que toutes les étiquettes personnalisées (mine et source) sont gérées simultanément?

Était-ce utile?

La solution

Souvent, la seule solution consiste à l'essayer.

Je l'ai essayé de trois manières différentes: une bibliothèque de balises personnalisées JSP, un fichier JSP paramétré et un fichier de balises JSP2.

Les deux premiers n'ont pas fonctionné (bien que je suspecte que la bibliothèque de balises puisse fonctionner), mais le fichier de balises a fonctionné! La solution reposait vaguement sur un exemple donné dans Printemps expert MVC et le flux Web .

Voici mon code dans WEB-INF / tags / renderConditionalControl.tag:

<%@ tag body-content="tagdependent" isELIgnored="false" %>
<%@ attribute name="readOnly" required="true" %>
<%@ attribute name="path" required="true" %>
<%@ attribute name="type" required="false" %>
<%@ attribute name="className" required="true" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="form" uri="/WEB-INF/spring-form.tld" %>
<%@ taglib prefix="spring" uri="/WEB-INF/spring.tld" %>

<c:if test="${empty type}">
<c:set var="type" value="text" scope="page" />
</c:if>

<spring:bind path="${path}">
    <c:choose>
        <c:when test="${readOnly}">
            <span class="readOnly">${status.value}</span>
        </c:when>
        <c:otherwise>
           <input type="${type}" id="${status.expression}" name="${status.expression}"
                    value="${status.value}" class="${className}" />
        </c:otherwise>
    </c:choose>
</spring:bind>

Et voici le code dans le jsp:

Tout d'abord, avec les autres directives taglibs:

<%@ taglib tagdir="/WEB-INF/tags" prefix="tag" %> 

et dans le formulaire:

<tag:renderConditionalControl path="someObject.someField" type="text" readOnly="${someBoolean}" className="someClass" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top