Pregunta

Tengo un JSP que está usando Spring: etiquetas de formulario para vincular controles a un objeto de comando.

Me gustaría modificarlo de la siguiente manera: si [alguna condición es verdadera] que mostrar los controles; de lo contrario, solo muestra el texto. (Ejemplos: si el usuario es un administrador, muestre los controles; de lo contrario, solo muestre el texto. Si el elemento aún está abierto para modificaciones, muestre los controles, de lo contrario muestre el texto).

En otras palabras, quiero esto:

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

Pero quiero una manera fácil de crear esto para cada campo (hay muchos).

Si creo una etiqueta personalizada para generar el texto anterior (dado '' ALGUNA RUTA ''), ¿se vincularán las etiquetas personalizadas de Spring?

Supongo que lo que realmente pregunto es: ¿puedo crear etiquetas personalizadas que generen etiquetas personalizadas de Spring que luego se enlacen? ¿O todas las etiquetas personalizadas (la mía y la de Spring) se manejan simultáneamente?

¿Fue útil?

Solución

Con frecuencia, la única solución es probarlo.

Lo intenté de tres maneras diferentes: una biblioteca de etiquetas personalizadas JSP, una inclusión JSP parametrizada y un archivo de etiquetas JSP2.

Los dos primeros no funcionaron (aunque sospecho que la biblioteca de etiquetas puede funcionar), ¡pero el archivo de etiquetas sí! La solución se basó libremente en un ejemplo dado en Expert Spring MVC y Web Flow .

Aquí está mi código en 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>

Y aquí está el código en el jsp:

Primero, con las otras directivas taglibs:

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

y dentro del formulario:

<tag:renderConditionalControl path="someObject.someField" type="text" readOnly="${someBoolean}" className="someClass" />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top