Domanda

Ho un JSP che usa i tag Spring: form per associare i controlli a un oggetto comando.

Vorrei modificarlo come segue: se [qualche condizione è vera] che visualizzare i controlli; altrimenti, basta visualizzare il testo. (Esempi: se l'utente è un amministratore, visualizza i controlli, altrimenti visualizza solo il testo. Se il contenuto è ancora aperto per la modifica, visualizza i controlli, altrimenti visualizza il testo.)

In altre parole, voglio questo:

<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>

Ma voglio un modo semplice per creare questo per ogni campo (ce ne sono molti).

Se creo un tag personalizzato per generare il testo sopra (dato " SOME PATH "), i tag personalizzati Spring verranno associati?

Immagino che ciò che sto davvero chiedendo sia: posso creare tag personalizzati che generano tag personalizzati Spring che quindi vengono associati? O tutti i tag personalizzati (i miei e quelli di Spring) vengono gestiti contemporaneamente?

È stato utile?

Soluzione

Spesso l'unica soluzione è provarla.

L'ho provato in tre modi diversi: una libreria di tag personalizzata JSP, un JSP con parametri e un file di tag JSP2.

I primi due non hanno funzionato (anche se sospetto che la libreria di tag possa funzionare), ma il file di tag ha funzionato! La soluzione si basava vagamente su un esempio fornito in MVC e flusso Web esperti di Spring .

Ecco il mio codice in 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>

Ed ecco il codice in jsp:

Innanzitutto, con le altre direttive taglibs:

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

e nella forma:

<tag:renderConditionalControl path="someObject.someField" type="text" readOnly="${someBoolean}" className="someClass" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top