2009-01-13 75 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