2009-01-13 74 views
8

我有一个使用Spring:表单标记将控件绑定到命令对象的JSP。与自定义标记的Spring MVC标记交互

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

换句话说,我想要这个:

<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的)被同时处理?

回答

10

通常唯一的解决方法是尝试它。

我尝试了三种不同的方式 - 一个JSP自定义标签库,一个参数化JSP包含和一个JSP2标签文件。

前两个没有工作(虽然我怀疑标签库可以工作),但标签文件没有!该解决方案基于Expert Spring MVC and Web Flow中给出的示例。

这是我在WEB-INF /标签/ 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代码:

首先,与其他标签库指令:

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

并在表格内:

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

这正是我需要的! – kosoant 2009-02-01 18:31:37