Spring MVCタグとカスタムタグの相互作用
-
22-07-2019 - |
質問
Spring:formタグを使用してコントロールをコマンドオブジェクトにバインドするJSPがあります。
次のように変更したいと思います:if [some condition is true] than than 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>
ただし、すべてのフィールド(これは多数あります)に対して簡単に作成する方法が必要です。
上記のテキストを生成するカスタムタグを作成すると(&quot; SOME PATH&quot;と指定)、Springカスタムタグはバインドされますか?
私が本当に求めているのは、その後バインドされるSpringカスタムタグを生成するカスタムタグを作成できますか?または、すべてのカスタムタグ(私のタグとSpringのタグ)が同時に処理されますか?
解決
多くの場合、唯一の解決策はそれを試すことです。
3つの異なる方法で試してみました-JSPカスタムタグライブラリ、パラメータ化されたJSPインクルード、およびJSP2タグファイル。
最初の2つは機能しませんでしたが(タグライブラリを機能させることができると思いますが)、タグファイルは機能しました!このソリューションは、 Expert Spring MVCおよび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" />