当前位置: 首页 > 知识库问答 >
问题:

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

谷梁波
2023-03-14

每个字段类型都在一个独立的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填充数据。

    null

共有1个答案

沃驰
2023-03-14

您可以创建一个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模板。

 类似资料:
  • 问题内容: 我在XML中定义了以下布局: 如何使用LayoutInflater来获取ListView和ProgressBar并在代码中分配它? 问题答案: 通过这种方式:

  • 这个问题的主要原因如下。我正在动态填充,但什么都没有发生。

  • 问题内容: 给定这样的HTML文件: 如何创建一个布局状态,以一个标题模板填充“标题”,用一个脚注模板填充页脚,然后允许子状态填充空的ui视图? 我想空的ui-view也可以命名为ui-view =“ main”。 问题答案: 一种方法是建立全局“根”状态。因此, 每个 州都是孩子。像root.pages,root.pages.edit,root.settings等。然后,您可以提供页眉和页脚的默

  • 我已经在这里看了这个问题,但是我仍然找不到我做错了什么。Logcat中没有错误,并且肯定有数据被传递给它进行制作。这是我的设置: 这一切都发生在我在Android Studio中手动放置的元素下面。我有一个滚动视图。在这个滚动视图中,我有一个LinearLayout,即parentLayout,它被传递给这个类。此方法应添加另一个水平线性布局,

  • 模板布局可以使得页面公共部分封装在一个模板里 本框架中启用模板布局的方法为: 1.通常在分组配置中增加配置项:  'layout' => true, 如果是所有分组都启用布局,那么这个配置项可以写到项目配置中。 2.项目模板分组目录下增加布局文件模板,比如:/App1/View/Home/Layout.html 布局模板文件名称必须为Layout.html,注意L大写。 3.布局文件我们就创建好了

  • 问题内容: 我是Android开发的新手,已经开始创建自己的UI。我看到您可以动态创建它,如下所示(Dynamic Layouts ): 但我也看到netbeans有一个文件 Resources- > layout-> main.xml 。因此,您可以为UI创建XML布局(声明XML布局): 所以我的问题是应该使用哪个?在Android开发中,对动态布局和XML布局有何建议和优缺点? 问题答案: