代码之家  ›  专栏  ›  技术社区  ›  Jacob Mattison

Spring MVC标记与自定义标记的交互

  •  8
  • Jacob Mattison  · 技术社区  · 17 年前

    我有一个JSP,它使用spring:form标记将控件绑定到命令对象。

    我想修改如下:如果[某些条件为真]而不是显示控件;否则,只显示文本。(示例:如果用户是管理员,则显示控件,否则只显示文本。如果WhatSit仍打开进行修改,则显示控件,否则显示文本。)

    换句话说,我想要这个:

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

    但是我想要一个简单的方法为每个领域创建这个(有很多)。

    如果我创建一个自定义标记来生成上面的文本(给定的“某些路径”),那么Spring自定义标记会绑定吗?

    我想我真正要问的是:我能创建定制标签来生成Spring定制标签吗? 然后 得到约束?还是同时处理所有自定义标签(我的和Spring的)?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Jacob Mattison    14 年前

    通常唯一的解决办法就是尝试一下。

    我尝试了三种不同的方法——JSP自定义标记库、参数化JSP include和JSP2标记文件。

    前两个没用(虽然我怀疑标签库可以用),但是标签文件可以用!该解决方案松散地基于 Expert Spring MVC and Web Flow .

    这是我在WEB-INF/tag s/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>
    

    下面是JSP中的代码:

    首先,使用其他taglibs指令:

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

    在形式上:

    <tag:renderConditionalControl path="someObject.someField" type="text" readOnly="${someBoolean}" className="someClass" />