Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring MVC标记与自定义标记的交互_Spring_Spring Mvc_Jstl_Jsp Tags - Fatal编程技术网

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

Spring MVC标记与自定义标记的交互,spring,spring-mvc,jstl,jsp-tags,Spring,Spring Mvc,Jstl,Jsp Tags,我有一个JSP,它使用Spring:form标记将控件绑定到命令对象 我想修改如下:如果[某些条件为真],则显示控件;否则,只显示文本。(示例:如果用户是管理员,则显示控件,否则仅显示文本。如果whatsit仍处于打开状态以进行修改,则显示控件,否则显示文本。) 换句话说,我想要这个: <c:choose> <c:when test="SOME TEST HERE"> <form:input path="SOME PATH" />

我有一个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>

${SOME PATH}

但是我想用一种简单的方法为每个领域创建它(有很多)

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


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

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

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

前两个不起作用(虽然我怀疑标记库可以工作),但是标记文件起作用了!该解决方案大致基于中给出的示例

以下是我在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>

${status.value}
以下是jsp中的代码:

首先,使用其他taglibs指令:

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

在表格内:

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


这件事进展如何?我一直在使用标记文件,但它与的完全不同。Spring标记检查options标记是否有祖先父标记,但由于它们位于不同的标记文件中,因此找不到祖先父标记。这会引发一个异常:(该特定应用程序已完成,但仍在生产环境中运行,工作正常。我们确实在呈现输入的部件中添加了另一个嵌套的
c:when
标记;对于某些标记(如textarea或select),其呈现方式不同。