سؤال

ولدي JSP الذي يستخدم الربيع: علامات النموذج لربط عناصر التحكم إلى كائن الأمر

وأود أن تعديله على النحو التالي: إذا [بعض الشرط صحيحا] من عرض عناصر التحكم. خلاف ذلك، مجرد عرض النص. (أمثلة:.. إذا كان المستخدم هو المسؤول، وعرض الضوابط، وإلا مجرد عرض النص إذا كان 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>

ولكن أريد طريقة سهلة لإنشاء هذا لكل حقل (هناك الكثير).

إذا كنت إنشاء علامة مخصصة لإنشاء النص أعلاه (نظرا "بعض PATH")، وعلامات الربيع مخصصة الحصول على ملزمة؟

وأعتقد أن ما أنا أسأل حقا هو: لا أستطيع إنشاء علامات مخصصة التي تولد العلامات المخصصة الربيع أن على ثم الحصول على ملزمة؟ أو هل كل العلامات المخصصة (الألغام وفي الربيع) الحصول على معالجة في وقت واحد؟

هل كانت مفيدة؟

المحلول

كثير من الأحيان الحل الوحيد هو أن تحاول ذلك.

وحاولت ثلاث طرق مختلفة - وهو JSP مكتبة العلامة المخصصة، وJSP معلمات تشمل، وملف العلامة JSP2

الأولين لم يعمل (على الرغم من أنني أشك يمكن إجراء مكتبة العلامة للعمل)، ولكن لم ملف بطاقة! واستند حل مبني على مثال الواردة في الخبراء الربيع MVC وتدفق الويب .

وهنا قانون بلدي في 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>

وهنا هو رمز في التخطيط الاستراتيجي المشترك:

أولا، مع توجيهات taglibs أخرى:

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

وضمن النموذج:

<tag:renderConditionalControl path="someObject.someField" type="text" readOnly="${someBoolean}" className="someClass" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top