gpt4 book ai didi

html - 如何为动态布局构建 FTL 模板?

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:24 25 4
gpt4 key购买 nike

我正在构建一个 freemarker 模板来生成一个 jsp View 。使用 2 列布局,其中表单中的每个字段都是 float 的并占据列的整个宽度。

每个字段类型都在一个独立的 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].@id[0]?has_content >id="${grupoCampos[0].@id[0]!}"</#if> <#if grupoCampos[0].@estilo[0]?has_content >style="${grupoCampos[0].@estilo[0]!}"</#if>>
<#list grupoCampos?children as nodos>

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

<#list nodos?children as campo>
<#if campo?node_type = 'element' && chequearPermisos(campo[0].@permiso[0]!"all")>
<#if ((campo[0].@mostrar[0]!"todos") == 'todos' || (campo[0].@mostrar[0]!"todos") == tipoFormulario)>
<#switch campo?node_name>
<#case "subtitulo">
<div class="subtitulo " style="${campo[0].@estilo[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 来填充数据。

我遇到的问题是当我必须调整 View 的布局时,这个布局是为 form 2 columns 设计的,我需要:

  • 在布局中添加标题或更多列
  • 更改背景颜色或图像、字体大小和颜色
  • 将图片添加到页眉

如果不使用#IF 使 FTL 复杂化,我不知道如何做到这一点,标记 CSS 的每个部分,然后拥有一个大的 xml。

我可以看到或使用 freemarket 中的任何布局?

我们的想法是在 java 中继续使用一组 FTLs 一个 web 系统和一个简单的网页。

最佳答案

您可以创建一个 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> 分配局部变量如果每次都动态创建表,则实现一个计数器来确定您拥有的列数。

关于html - 如何为动态布局构建 FTL 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21419974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com