【问题标题】:Spring MVC tag interaction with custom tagSpring MVC 标签与自定义标签的交互
【发布时间】:2010-10-01 04:34:59
【问题描述】:

我有一个使用 Spring:form 标签将控件绑定到命令对象的 JSP。

我想修改如下: if [some condition is true] than display the controls;否则,只显示文本。 (例如:如果用户是管理员,则显示控件,否则只显示文本。如果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>

但我想要一种简单的方法来为每个字段(有很多)创建它。

如果我创建一个自定义标签来生成上述文本(给定“SOME PATH”),Spring 自定义标签会被绑定吗?

我想我真正要问的是:我可以创建自定义标签来生成 然后 绑定的 Spring 自定义标签吗?还是同时处理所有自定义标签(我的和 Spring 的)?

【问题讨论】:

    标签: spring spring-mvc jstl jsp-tags


    【解决方案1】:

    通常唯一的解决方案就是尝试一下。

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

    前两个不起作用(虽然我怀疑可以使标签库起作用),但是标签文件起作用了!该解决方案大致基于Expert Spring MVC and Web Flow 中给出的示例。

    这是我在 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>
    

    这是jsp中的代码:

    首先,使用其他 taglibs 指令:

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

    在表格内:

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

    【讨论】:

    • 你最近过得怎么样?我一直在使用标记文件,但与
    • 该特定应用程序已完成,但仍在生产中运行并且工作正常。我们最终在呈现输入的部分内添加了另一个嵌套的c:when 标签;它对某些标签(例如 textarea 或 select)呈现不同的效果。
    猜你喜欢
    • 2011-12-19
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多