2014-01-29 6 views
0

Я создаю шаблон freemarker для создания представления jsp. Использование макета в 2 столбцах, где каждое поле в форме плавает и занимает всю ширину столбца.Как создать шаблон FTL для динамического макета?

Каждый тип поля находится в независимой FTL, чтобы легко добавлять и удалять поля.

FTL шаблон имеет следующий код:

<#if (data)?has_content> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <#include "estructura/Cabecera.ftl"> 
     <s:include value="${tipoFormulario}_${data.Artefacto.nombreSubModulo?lower_case}_scripts.jsp"></s:include> 
    </head> 
    <body> 

     <div class="" id="dim-listas"> 
      <s:fielderror /> 
     </div> 

     <s:form theme="simple" action="Mostrar${data.Artefacto.nombreSubModulo?cap_first}.action"> 

     <#-- Estructura en columnas, parseo usando CSS --> 
     <#list data.Artefacto.formulario.grupoCampos as grupoCampos> 
     <div class="grupoCampos" <#if grupoCampos[0][email protected][0]?has_content >id="${grupoCampos[0][email protected][0]!}"</#if> <#if grupoCampos[0][email protected][0]?has_content >style="${grupoCampos[0][email protected][0]!}"</#if>> 
      <#list grupoCampos?children as nodos> 

       <#if nodos?node_type = 'element' && chequearPermisos(nodos[0][email protected][0]!"all")> 
        <#if ((nodos[0][email protected][0]!"todos") == 'todos' || (nodos[0][email protected][0]!"todos") == tipoFormulario)> 
         <div style="${nodos[0][email protected][0]!}" <#if nodos[0][email protected][0]?has_content>id="${nodos[0][email protected][0]!}"</#if> class="${nodos?node_name} ${nodos[0][email protected][0]!}"> 

          <#list nodos?children as campo> 
           <#if campo?node_type = 'element' && chequearPermisos(campo[0][email protected][0]!"all")> 
            <#if ((campo[0][email protected][0]!"todos") == 'todos' || (campo[0][email protected][0]!"todos") == tipoFormulario)> 
             <#switch campo?node_name> 
              <#case "subtitulo"> 
              <div class="subtitulo " style="${campo[0][email protected][0]!}">${campo[0]}</div> 
             <#break> 
              <#case "texto"> 
              <#-- campo de texto --> 
              <#include "campos/Campos Texto.ftl"> 
             </#switch> 
            </#if> 
           </#if> 
          </#list> 
         </div> 
        </#if>     
       </#if>   
      </#list> 
     </div> 
     </#list> 

     </s:form> 
     <#include "estructura/Pie.ftl">  
    </body> 
</html> 
<#else> 
<@pp.dropOutputFile /> 
</#if> 

этот FTL бег с FMPP, используя XML для заполнения данных.

Проблема, которую я имею, когда я должен настроить расположение точки зрения, эта схема предназначена для формы 2 колонки и мне нужно:

  • добавить заголовок или несколько столбцов макета
  • изменить цвет фона или изображение, размер и цвет шрифта
  • добавлять изображения в заголовок

я не знаю, как сделать это, не усложняя FTL с #if, отмечает каждую часть CSSd, затем имея большой xml.

Есть ли какие-либо макеты в freemarket, например, я могу их увидеть или использовать?

Идея состоит в том, чтобы использовать один набор FTL в виде веб-системы и простой веб-страницы в java.

+0

Вы думаете, что вам следует более конкретно описать, в чем проблема с реализацией этого. На какой детали вы застряли? Например, если вы можете добиться того, чего хотите, с помощью отредактированного вручную JSP/CSS (не так ли?), То почему вы не можете генерировать тот же результат с FMPP? – ddekany

+0

Я могу сделать это с помощью отредактированного вручную jsp/css, но я не знаю, как это сделать в freemarker, не используя слишком много, если и метки. я улучшил свой вопрос – Aegis

+0

возможный дубликат [Freemarker: динамическая интерполяция под переменных] (http://stackoverflow.com/questions/12392822/freemarker-dynamic-interpolation-of-sub-variables) –

ответ

1

Вы можете создать шаблон freemarker для использования в качестве макета. В шаблоне вы захотите встроить свою сложную логику, а также ваш стиль.

Вот пример шаблона макета, который я использовал в текущем проекте.

<#include "../common/commonStyles.ftl"> 
<#if document.visuallyImpaired> 
    <link rel="stylesheet" type="text/css" href="css/visuallyImpaired/devLetterLayout.css" media="all" /> 
<#else> 
    <link rel="stylesheet" type="text/css" href="css/devLetterLayout.css" media="all" /> 
</#if> 

<table class="headerTable"> 
    <tbody> 
     <#if document.visuallyImpaired> 
      <tr> 
       <td class="visImpairedTitle"> 
        <#include "title.ftl"> 
       </td> 
      </tr> 
     </#if> 
     <tr> 
      <td class="headerSideColumn"> 
       <#include "bannerImage.ftl"> 
      </td> 
      <td class="headerCenterColumn"> 
       <#if !document.visuallyImpaired> 
        <#include "title.ftl"> 
       </#if> 
      </td> 
      <td class="headerSideColumn"> 
      </td> 
     </tr> 
     <tr> 
      <td class="letterDate"> 
       <#include "letterDate.ftl"> 
      </td> 
     </tr> 
    </tbody> 
</table> 

В вашем основном шаблоне вы будете использовать <#assign> тегов для вашего переменных и <#include> тегов тянуть в .ftl шаблонах, которые вы создали.

Вы также можете разбить часть своей логики на отдельные шаблоны, чтобы сохранить исходную страницу в чистоте. Просто поставьте <#assign> и <#include> в свой <#list>.

Для количества столбцов я еще ничего не нашел, но вы можете сделать что-то вроде <#assign columnCount=x>, а затем <#include "tableColumn" + columnCount + ".css">, чтобы ограничить количество изменений, которые вам нужно добавить.

Вы можете даже назначить локальную переменную с помощью <#local> и реализовать счетчик, чтобы определить количество столбцов, которое вы имеете, если таблица создается динамически каждый раз.

Смежные вопросы