Struts2-подобные темы в Spring 3 MVC - PullRequest
0 голосов
/ 15 февраля 2011

В настоящее время я работаю с Spring 3 MVC, и в моих шаблонах JSP я замечаю, что мне приходится повторяться несколько раз для таких вещей, как метки, ошибки, элементы макета и т. Д., Например,

<div class="field-row">
  <label>Email:</label>
  <form:input path="email" />
  <form:errors path="email" cssClass="error" />
</div>

В Struts 2 есть тематические компоненты, которые на основе параметра темы будут генерировать HTML-код на основе используемого тега. Есть ли эквивалент этого в Spring 3 или какой-нибудь альтернативный плагин, который можно использовать для достижения аналогичного эффекта?

Например, в Struts 2 вы можете получить что-то вроде

<s:textfield key="user.email" required="true" maxlength="200" theme="someTheme" />    

и в паре с соответствующим шаблоном Freemarker, например

    <div class="${rowClass}">
      <#include "/${parameters.templateDir}/tgis/control-label.ftl" />  
      <#-- render the control -->
      <input type="text" name="${parameters.name?default("")?html}"
        <#if parameters.maxlength?exists>maxlength="${parameters.maxlength?html}"</#if>
         .
         .
        <#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
      />
      <#include "/${parameters.templateDir}/tgis/control-errors.ftl" />
    </div>

HTML автоматически генерируется со всеми метками, ошибками и т. Д.

    <div class="row"> 
      <label for="user.email">E-mail <span id="user.email_rlabel" class="required">*</span>
      </label>
      <input type="text" name="user.email" maxlength="200" value="xxx@yyy.com" id="editProfile_user_email" class="inputText" /> 
    </div>

Ответы [ 2 ]

0 голосов
/ 15 февраля 2011

Файлы тегов будут работать хорошо.Единственная проблема, которую я обнаружил при использовании файлов тегов, заключается в том, что они генерируют кучу пробелов при визуализации.Так что, если у вас большая форма, она создаст тонну лишних пробелов в HTML-документе.

0 голосов
/ 15 февраля 2011

Существует общее решение в JSP (x). Вам нужен файл jsp tagx, который описывает ваш шаблон, а затем вы можете использовать его в своем jspx.

Если вам нужен полный пример, чем взглянуть на Spring Roo (1.1.1), он интенсивно использует эту технику.

Пример ( Я немного упростил пример roo, но я надеюсь, что он все еще работает правильно: даже если нет, он иллюстрирует, что я имею в виду ):

теги / форма / поле / textara.tagx:

<jsp:root xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:spring="http://www.springframework.org/tags"
    xmlns:form="http://www.springframework.org/tags/form"
    xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
  <jsp:output omit-xml-declaration="yes" />

  <jsp:directive.attribute name="id" type="java.lang.String" required="true" />
  <jsp:directive.attribute name="field" type="java.lang.String" required="true" />

  <spring:message code="label_${fn:toLowerCase(fn:substringAfter(id,'_'))}" var="label" />

  <div id="_${id}_id">
     <label for="_${id}_id">
       <c:out value="${label}" />        
     </label>
     <form:textarea id="_${id}" path="${field}"  />
     <form:errors cssClass="errors" id="_${id}_error_id" path="${field}" />
   </div>
   <br />

</jsp:root>

использование в create.jspx:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:c="http://java.sun.com/jsp/jstl/core"
     xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields"
     xmlns:form="urn:jsptagdir:/WEB-INF/tags/form"
     xmlns:jsp="http://java.sun.com/JSP/Page"
     xmlns:spring="http://www.springframework.org/tags" version="2.0">
...
    <field:textarea field="street" id="c_com_test_roo_domain_Address_street"/>
...
</div>
...