사용자 정의 태그와의 스프링 MVC 태그 상호 작용
-
22-07-2019 - |
문제
스프링 : 양식 태그를 사용하는 JSP가 있습니다.
다음과 같이 수정하고 싶습니다. [일부 조건이 true] 컨트롤을 표시하는 것보다; 그렇지 않으면 텍스트 만 표시하십시오. (예 : 사용자가 관리자 인 경우 컨트롤을 표시하고 그렇지 않으면 텍스트를 표시하십시오. 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>
그러나 나는 모든 분야에서 이것을 만들 수있는 쉬운 방법을 원합니다 (많은 것이 있습니다).
위의 텍스트를 생성하기 위해 사용자 정의 태그를 만들면 ( "일부 경로") 스프링 사용자 정의 태그가 바인딩 되나요?
내가 정말로 묻는 것은 : 스프링 사용자 지정 태그를 생성하는 사용자 정의 태그를 만들 수 있습니까? 그 다음에 구속력이 있습니까? 아니면 모든 맞춤형 태그 (광산 및 스프링)가 동시에 처리됩니까?
해결책
종종 유일한 해결책은 시도하는 것입니다.
JSP 사용자 정의 태그 라이브러리, 매개 변수화 된 JSP 포함 및 JSP2 태그 파일의 세 가지 방법을 시도했습니다.
처음 두 개는 작동하지 않았지만 (태그 라이브러리가 작동하도록 할 수 있다고 생각하지만) 태그 파일이 그랬습니다! 솔루션은 전문가 스프링 MVC 및 웹 흐름.
다음은 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" />