天道酬勤,学无止境

Using Dynamic Variables in Velocity Templates

I am using velocity templates to generate email templates and here I want to create tables for each 'tag' with respective values as table data.

I am passing a List tags with details of the tags including tagName, using which I am passing the respective List for each tag. (If tagName = "test", I am passing the data for the test table as $test)

As shown I have set the data of each table to $arrayobjs, but the table does not display the rows as I think it doesnt iterate through the $arrayobs. Please help me iterate through the data and set the data to the coloumns.

P.S.-Although I am able to print the value of $tags[0] , $arrayobjs[0] does not print a value

    #set ($d = '$')                
        #foreach($tag in $tags)
        #set ($var = "${d}${tag.tagName}")
        #set ($arrayobjs = "#evaluate($var)")
            <table style='width:600px; padding-left: 11px; font:Segoe UI;'>
                <tr>
                    <td> <span style='font-size: 17px; font-weight: 400; font-family:Georgia;'>$tag.tagName </span></td>
                </tr>
                </table>
                <br>
                <table width=583 style='width:437.5pt; margin-left:8.25pt;border-collapse:collapse;font-family:"Segoe UI",sans-serif;'>
                    <tr  style='vertical-align:top;height:10px;'>

                        <td width=50px style='border:solid white 1.0pt;background: #a3a3c2;padding:1pt 1pt 1pt 1pt;'>
                            <p> <span style='font-size:10.0pt;color:#3d3d5c;'><b>COL1</b></span> <span style='font-size:9.0pt;color:#404040'> <br><b></b> </span> </p>
                        </td>
                        <td width=100px style='border:solid white 1.0pt;background: #a3a3c2;padding:1pt 1pt 1pt 1pt;'>
                            <p> <span style='font-size:10.0pt;color:#3d3d5c'><b>COL2</b></span> <span style='font-size:9.0pt;color:#404040'> <br><b></b> </span> </p>
                        </td>
                        <td width=50px style='border:solid white 1.0pt;background: #a3a3c2;padding:1pt 1pt 1pt 1pt;'>
                            <p> <span style='font-size:10.0pt;color:#3d3d5c'><b>COL3</b></span> <span style='font-size:9.0pt;color:#404040'> <br><b></b> </span> </p>
                        </td>
                        <td width=50px style='border:solid white 1.0pt;background: #a3a3c2;padding:1pt 1pt 1pt 1pt;'>
                            <p> <span style='font-size:10.0pt;color:#3d3d5c'><b>COL4</b></span> <span style='font-size:9.0pt;color:#404040'> <br><b></b> </span> </p>
                        </td>
                        <td width=50px style='border:solid white 1.0pt;background: #a3a3c2;padding:1pt 1pt 1pt 1pt;'>
                            <p> <span style='font-size:10.0pt;color:#3d3d5c'><b>COL5</b></span> <span style='font-size:9.0pt;color:#404040'> <br><b></b> </span> </p>
                        </td>
                        <td width=50px style='border:solid white 1.0pt;background: #a3a3c2;padding:1pt 1pt 1pt 1pt;'>
                            <p> <span style='font-size:10.0pt;color:#3d3d5c'><b>COL6</b></span> <span style='font-size:9.0pt;color:#404040'> <br><b></b> </span> </p>
                        </td>
                    </tr>
                    #foreach($o in $arrayobjs)
                    <tr  style='vertical-align:top;height:5px;'>
                        <td width=50px style='border:solid white 1.0pt;background: #f0f0f5;padding:0.5pt 0.5pt 0.5pt 0.5pt;'>
                            <p> <span style='font-size:9.0pt;color:#7F7F7F'></span> <span style='font-size:9.0pt;color:#404040'>$o.col1 </span> </p>
                        </td>
                        <td width=180px style='border:solid white 1.0pt;background: #f0f0f5;padding:0.5pt 0.5pt 0.5pt 0.5pt;'>
                            <p> <span style='font-size:9.0pt;color:#7F7F7F'></span> <span style='font-size:9.0pt;color:#404040'>$o.col2</span> </p>
                        </td>
                        <td width=30px style='border:solid white 1.0pt;background: #f0f0f5;padding:0.5pt 0.5pt 0.5pt 0.5pt;'>
                            <p> <span style='font-size:9.0pt;color:#7F7F7F'></span> <span style='font-size:9.0pt;color:#404040'>$o.col3</span> </p>
                        </td>
                        <td width=30px style='border:solid white 1.0pt;background: #f0f0f5;padding:0.5pt 0.5pt 0.5pt 0.5pt;'>
                            <p> <span style='font-size:9.0pt;color:#7F7F7F'></span> <span style='font-size:9.0pt;color:#404040'>$o.col4</span> </p>
                        </td>
                        <td width=30px style='border:solid white 1.0pt;background: #f0f0f5;padding:0.5pt 0.5pt 0.5pt 0.5pt;'>
                            <p> <span style='font-size:9.0pt;color:#7F7F7F'></span> <span style='font-size:9.0pt;color:#404040'>$o.col5</span> </p>
                        </td>
                        <td width=30px style='border:solid white 1.0pt;background: #f0f0f5;padding:0.5pt 0.5pt 0.5pt 0.5pt;'>
                            <p> <span style='font-size:9.0pt;color:#7F7F7F'></span> <span style='font-size:9.0pt;color:#404040'>$o.col6</span> </p>
                        </td>
                    </tr>
                    #end
                </table>
            #end
标签

评论

After almost 2 years I suggest the following answer :-)

#set ($d = '$')
#set ($h = '#')

#foreach($tag in $tags)
    #set ( $temp = "${h}set ( ${d}var = ${d}${tag.tagName} )" )
    #evaluate($temp)

    ## html code for table header

    #foreach($o in $var)
        ## table rows
    #end
#end

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在liferay主题(速度模板)中使用自定义服务或liferay服务?(Using custom services or liferay services in liferay themes (velocity templates)?)
    问题 如何在init_custom.vm , portal_normal.vm等速度文件的liferay主题中使用自定义服务方法 我看到Liferay的提供了大量的辅助工具类等变量$portalUtil为PortalUtil, $getterUtil为GetterUtil等,在init.vm文件中。 那么是否可以从UserLocalServiceImpl获得我的自定义服务的实例,例如com.my.custom.service.MyCustomLocalServiceImpl或liferay服务的实例? 这是一些伪代码,以说明我需要什么: // this code calls method from MyCustomLocalServiceImpl class to fetch items #set ($listOfItems = $myCustomLocalServiceUtil.getAllItems()) // this code calls method from UserLocalServiceImpl class to fetch users #set ($listOfUsers = $userLocalServiceUtil.getUsers(0, 99)) 环境:Liferay 6.1 CE GA1 回答1 有可能的。 以下代码显示了如何获取服务: //
  • Atlassian JIRA插件开发:如何使变量可用于速度模板(Atlassian JIRA Plugin Development: How to make variables available to velocity templates)
    问题 公平警告:除非您具有JIRA的经验并可以访问其来源(企业用户),否则很难回答这个问题。 大家问候, 我正在写一个扩展AbstractIssueSelectAction的插件。 我注意到${issue.summary}等都可以从我的速度模板中获得,但是,还有其他一些我想介绍的东西。 我不知道如何在速度参数图中添加其他内容。 我什至使用了远程调试器来尝试逐步检查堆栈并弄清楚发生了什么-但是由于堆栈太深以及我无法正确附加所有源代码这一事实,我还是不清楚(很多网络工作似乎都被混淆了)。 我也在Atlassian支持论坛上发布了这个问题,我只是在这里交叉发布,以使更多的人关注此问题。 动作代码示例: public class MyOperation extends AbstractIssueSelectAction { // ... private final Issue myIssue; public String doCollect() throws Exception { log.debug("Running doCollect()"); return "collectinfo"; } } 示例插件配置: <webwork1 key="unique_key" name="My Name" class="java.lang.Object"> <actions> <action
  • Is there a Template Engine like Velocity or Freemarker for Delphi? [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 7 years ago. Improve this question For web applications, it would be helpful if Delphi object properties and methods could be "connected" with HTML code. This could be used in many ways, both during the HTML response build stage and the request processing stage: access a server-side object property value to output it in the HTML code bind a server-side object property to a HTML form input field, so
  • Delphi 是否有像 Velocity 或 Freemarker 这样的模板引擎? [关闭](Is there a Template Engine like Velocity or Freemarker for Delphi? [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 7年前关闭。 改进这个问题 对于 Web 应用程序,如果 Delphi 对象属性和方法可以与 HTML 代码“连接”,那将会很有帮助。 这可以以多种方式使用,包括 HTML 响应构建阶段和请求处理阶段: 访问服务器端对象属性值以在 HTML 代码中输出将服务器端对象属性绑定到 HTML 表单输入字段,以便 Web 应用程序将表单 HTML 与其当前值一起发送,并在客户端提交表单时将该属性设置为输入的值将 HTML 表单按钮绑定到服务器端对象方法,该方法会在客户端提交表单时执行 我还没有找到一个原生的 Delphi 库,它可以更容易地将此​​类 HTML 添加到 Delphi 对象绑定。 我的问题: 是否有我可以在 Delphi 应用程序中使用的脚本代码生成模板引擎,例如 Apache Velocity 或 Freemarker(参见下面的示例)? (不在 IDE 中 - 我不是在寻找基于 OTA 的解决方案或 Delphi 代码模板) 模板引擎会将 Delphi 对象绑定到模板并替换脚本变量,并根据对象中的值执行迭代/条件。 模板可以嵌套(调用其他模板)。 一个典型的用例是动态生成 HTML 代码,但也适用于
  • Atlassian JIRA Plugin Development: How to make variables available to velocity templates
    FAIR WARNING: this question is going to be pretty tough to answer unless you have experience with JIRA and have access to their source (enterprise users). Greetings all, I am writing a plugin which extends AbstractIssueSelectAction. I noticed that ${issue.summary}, etc are all available from within my velocity template, however, there are other things I wish to expose. I can't figure out how to add other things to the velocity parameter map. I even used a remote debugger to try to step through the stack and figure out what is going on - but it was pretty unclear to me both due to a deep stack
  • 在 Velocity 模板中定义数据库查询(Defining database queries inside Velocity templates)
    问题 我正在查看可以在我的项目中用作模板引擎的各种库,现在 Apache Velocity 看起来是一个不错的候选者。 我对它的用法有以下疑问: 是否可以在模板中指定 SQL 数据库查询并使用查询的返回值来填充参数?。 我在 Velocity 用户指南中找到了以下示例: Hello, #set( $result = $query.criteria("name") ) Your username is $result. 然而,该指南并没有解释太多关于执行 SQL 查询的内容。 是否可以定义一个 SQL SELECT 查询,该查询返回一个值并将该值分配给模板中的变量? 我想知道是否有可能像下面的例子一样? Hello, #set( $result = $executeQuery("SELECT name FROM user") ) Your username is $result. 如果您能对此有所了解,我们将不胜感激。 任何好心的人提供一个例子,或者指向我可以找到关于此的其他文档的位置? 回答1 我会推荐类似 http://velosurf.sourceforge.net/ 的东西,而不是直接嵌入查询。 回答2 Velocity 是一个非常轻量级的模板引擎,它本身的功能很少。 它的工作原理是将上下文中(由您)定义的变量插入到模板文件中。 默认情况下,上下文为empty
  • 速度,不同的模板路径(Velocity, different template paths)
    问题 有谁知道是否可以从不同路径以速度获取模板? 初始化后,Velocity 拒绝更改“file.resource.loader.path”。 这是我的代码: public Generator(){ Properties p = new Properties(); p.setProperty("resource.loader", "file"); p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader"); p.setProperty("file.resource.loader.path", ""); Velocity.init(p); } 模板可以位于不同的位置(用户可以通过文件对话框选择一个)。 所以我在从速度中获取模板时有这个代码 private Template fetch (String templatePath) { out_println("Initializing Velocity core..."); int end = templatePath.lastIndexOf(File.separator); Properties p = new Properties(); p.setProperty("file
  • vm(velocity)模板变量定义及使用
    定义变量写到VM模板中 在VelocityUtils.java 文件中写 该文件中定义方法: public static VelocityContext prepareContext(GenTable genTable) 定义变量 VelocityContext velocityContext = new VelocityContext();[到时候返回这个变量] 在该文件中设置变量 velocityContext.put(“tplCategory”, genTable.getTplCategory()); velocityContext.put(“tableName”, genTable.getTableName()); 在setTreeVelocityContext这个方法[该方法为设置树在模板中的变量] 例: context.put(“treeCode”, treeCode); context.put(“treeParentCode”, treeParentCode); context.put(“treeName”, treeName); context.put(“expandColumn”, getExpandColumn(genTable)); context.put(“orgLevel”,StringUtils.toCamelCase(“Org_Level”)); if
  • org.apache.velocity.exception.ResourceNotFoundException:无法找到资源“模板/电子邮件/test.vm”(org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'templates/email/test.vm')
    问题 我的代码如下。 VelocityEngine ve = new VelocityEngine(); ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "class"); ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); ve.init(); Template tempalte = ve.getTemplate("templates/email/test.vm"); 我收到以下错误。 org.apache.velocity.exception.ResourceNotFoundException:无法在 org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:452) 的 org.apache.velocity 找到资源“模板/电子邮件/test.vm” .runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335) 在
  • 自定义项目类型模板(Custom Project Type Templates)
    问题 当你在 WebStorm 中创建一个新项目时,你可以选择创建一个新的目录结构,其中预先填充了文件:库、样式表等,用于 HTM5 样板、Twitter 样板等模式。 如何为此创建自己的模板? 导入虚拟项目是它的黑客吗? 回答1 我建议不要使用模板。 我发现在 git 存储库(bitbucket、github 等)中创建“空”项目(当然来自现有项目)、克隆一个,然后从那里开始,要容易得多且易于维护。 根据文档, .idea应该在 repo 中,但.idea/workspace.xml应该被忽略。 这使您有机会逐步完善您的模板,并轻松地与团队共享。 回答2 使用 LivePlugin 插件创建项目模板: <projectTemplate projectType="foo" templatePath="resources/bar.zip" category="true"/> 使用 Velocity Template Language (VTL) 创建文件模板: 文件和代码模板是用 Velocity 模板语言 (VTL) 编写的。 所以它们可能包括: Fixed text (markup, code, comments, etc.). 在基于模板的文件中,固定文本按原样使用。 File template variables. 创建文件时,变量将替换为其值。 #parse 指令以包含在
  • Using custom services or liferay services in liferay themes (velocity templates)?
    How to use custom services method in liferay themes in velocity files like init_custom.vm, portal_normal.vm etc. I see liferay provides a lot of variables of helper utility classes like $portalUtil for PortalUtil, $getterUtil for GetterUtil and so on, inside the init.vm file. So is it possible to get instance of my custom services like an instance of com.my.custom.service.MyCustomLocalServiceImpl or services of liferay from UserLocalServiceImpl? Here is some psuedo code, to give an idea of what I need: // this code calls method from MyCustomLocalServiceImpl class to fetch items #set (
  • 在 Portlet Liferay 6.1 中呈现 Liferay 页面 URL(rendering Liferay page URLs inside of portlets Liferay 6.1)
    问题 我是 liferay 的新手,我几乎肯定这是非常简单的:使用速度标记,我希望能够生成指向 Liferay 网站中页面的链接,并将它们嵌入到不同页面的 portlet 中。 我对如何完成它有一个模糊的想法,所以我四处搜索,认为它会张贴在某个地方,但我找不到任何东西。 顺便说一下,我想把我想出的任何代码放在 portlet 的 view.jsp 中。 我会在这里使用速度标记,但我不认为(不确定)是否允许在 jsp 内部使用。 如果您需要更多信息来回复,请告诉我。 回答1 我会在这里使用速度标记,但我不认为(不确定)是否允许在 jsp 内部使用。 为什么要在 JSP ( view.jsp ) 中使用 Velocity 标记? 除了你在速度方面真的很棒的论点之外,我认为这样做没有任何好处。 尽管这里有一个链接可以帮助您在 JSP 中嵌入速度。 注意:在我看来,在 portlet 中的 JSP 中嵌入速度不是一个好习惯 在 JSP 中: 您将需要一个Layout对象,您可以借助 LayoutLocalServiceUtil 中的静态方法获得该对象。 获得布局后,您可以使用 com.liferay.portal.util.PortalUtil 的静态方法(如getLayoutFriendlyURL或getLayoutFullURL等)来构建 URL。 在 VM 中(这些将是主题中的*
  • Java属性中的动态占位符替换(Dynamic Placeholder substitution in properties in java)
    问题 我想在Java应用程序的属性中动态替换占位符。 喜欢 WelcomeMessage=Welcome Mr. {firstName} {lastName} !!! 这些firstName和LastName变量需要动态替换。 我们应该使用速度模板引擎吗? 还是有其他相同的开源框架? 谢谢,Manish 回答1 您可以使用Java SE的MessageFormat类。 它使您可以完全按照自己的要求做。 在您的情况下,假设props包含从文件中加载的所有属性,则下面的代码段必须可以解决问题。 MessageFormat.format((String) props.get("WelcomeMessage"), "First", "Last"); 请注意,属性文件应具有参数索引,而不是如下所示的命名参数。 WelcomeMessage=Welcome Mr. {0} {1} !!! 回答2 在我看来,速度是相当古老且令人不快的,有更好的方法可以做到这一点: StringTemplate是最简单的模板引擎,足以满足您的需要(请参见此处的语法示例)。 如果您已经在使用Spring 3,则它具有PropertyPlaceholderHelper类,该类也可以执行此操作,但是我不会仅使用Spring来掌握这一类。 回答3 一种方法是字符串替换: WelcomeMessage=Welcome Mr
  • Can I add custom objects to Velocity context with Maven archetype plugin?
    We have a number of code generators that use Velocity to generate projects. The generation can be quite complicated: reflection is used (to introspect 3rd party proxies that we have to interface with) prior to calling velocity - the resulting properties (a complex object graph) are added to the velocity context the project structure and files can vary depending on the options selected the templates do more than just variable substitution (they make use of a custom object added to the velocity context, which contains many derived properties, including collections of other objects which are
  • 我可以使用 Maven 原型插件将自定义对象添加到 Velocity 上下文吗?(Can I add custom objects to Velocity context with Maven archetype plugin?)
    问题 我们有许多使用 Velocity 生成项目的代码生成器。 生成可能非常复杂: 在调用速度之前使用反射(用于内省我们必须与之交互的第 3 方代理) - 结果属性(一个复杂的对象图)被添加到速度上下文中项目结构和文件可能因选择的选项而异模板不仅仅是变量替换(它们使用添加到速度上下文的自定义对象,其中包含许多派生属性,包括在模板中迭代的其他对象的集合) 我很想用 maven 原型替换它们,因为它们也使用 Velocity,但看起来它们似乎只能进行简单的变量替换和静态文件/文件夹结构。 有没有办法在从原型创建项目之前进行处理,将对象添加到速度上下文,并使原型模板能够访问它们? 如果是这样,要创建的文件夹和文件可以是动态的吗? (或者您是否需要为每个变体使用单独的原型?) 还是编写自定义 Mojo 更好? (本质上是用 Maven 插件包装现有的生成器)
  • Maven 原型 + Velocity:如何显示日期(Maven archetype + Velocity: how to show the date)
    问题 我有一个 Maven 原型项目。 当我使用这个原型时,我希望一些文件报告实际日期。 我尝试使用 $date 但 Velocity 无法识别它。 我找到了一个叫做 DateTools 的东西,但我不知道如何使用它。 这是我第一次使用 Velocity。 回答1 不幸的是,Maven Archetype 插件没有与 Velocity Tools 捆绑在一起。 我通过修改 Maven Archetypes Plugin 添加了它。 按照以下步骤操作,假设您使用的是 Maven 2.2.1: svn co -q http://svn.apache.org/repos/asf/maven/archetype/tags/maven-archetype-2.2 cd maven-archetype-2.2 curl -k -O https://raw.github.com/gist/3404715/59c7fa1c20c60e2a165de4109c2acffb8026febd/velocity-tools.patch patch -p0 -i velocity-tools.patch mvn install 修改后的 Maven Archetype 插件现在将安装在本地。 模板中的$date用法现在应该呈现,例如 The date is $date ...到: The date is
  • WSO2 APIM 未发布 API 的自定义序列/设置变量(WSO2 APIM Custom sequences for non published APIs / Setting variable)
    问题 我们已经定义了一个默认的自定义序列来管理不同的网关,如下所述 我们已经按照文档创建全局连接中的说明安装了序列 该序列仅从环境中读取 2 个变量,并用于构建端点 URL。 这是代码: <sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--In"> <property name="uri.var.host" expression="get-property('system','host')" /> <property name="uri.var.port" expression="get-property('system','port')" /> </sequence> 这在 Published API 上运行良好,但如果我们将 API 降级为原型(以便直接使用而无需订阅),则它不起作用。 我们已经尝试过: 在 API 级别将其安装为消息中介策略在/repository/resources/api_templates/prototype_template.xml设置参数依次 我们测试时的错误报告空主机名(因为它尝试读取变量,并且它是空的) 你知道如何在原型环境中设置环境变量吗? 回答1 在“Prototype Endpoint”中部署 API 时,使用 velocity_template.xml
  • 以速度动态构造变量名(construct variable names dynamically in velocity)
    问题 我想知道是否可以动态地将变量的名称构造为速度。 即假设我有 6 个变量到速度模板 [name1, name2, name3 .. name6] 我想输出它们。 所以我正在寻找类似的东西: #foreach ( $counter in [1..6] ) ${name${counter}} #end 有可能吗? 回答1 可以使用 #evaluate 指令: #evaluate ('$name1') #set ($d = '$') #foreach ($i in [1..6]) #set ($varName = "${d}name${i}") #evaluate($varName) #end 回答2 您可以构建一个映射并构建键的名称来检索您想要的值: #set( $map = {"${name}1":'value1', "${name}2":'value2'} ) #foreach ( $counter in [1..6] ) #set( $key = "${name}$counter" ) $map.get(${key}) #end 回答3 这是使用动态名称设置速度变量的技巧。 如果您设法在 Java 代码中预先调整速度上下文,如下所示: VelocityContext context = new VelocityContext(paramsMap); context.put(
  • 基于Velocity模版引擎实现动态生成Word文档,支持插入图片
    1 前言 Velocity是一种基于Java的模板引擎,但允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象。了解更多… 在开发过程中,我们经常遇到动态导出各种各样格式的文件,如PPT、Excel、Txt、Word等,Velocity可以根据模版动态填充文件内容。本文主要介绍下如何使用velocity动态生成word文档,并支持插入图片。 2 创建模版 首先,我们需要一个word文档,按照Velocity的模版格式自定义好,后续以该文档作为模版动态填充内容并生成word文档。 2.1 模版定义 这里我以个人简历模版为例,如下图为原始的个人简历模版: 我们把个人简历模版里需要填写的内容,使用Velocity的变量替换,如姓名使用$name替换,出生使用$birthday替换等,替换后的模版如下图所示: 来源:https://blog.csdn.net/as4589sd/article/details/104151808
  • 如何在具有速度的 spring-webmvc 中使用 VelocityLayoutViewResolver(How to use VelocityLayoutViewResolver in spring-webmvc with velocity)
    问题 <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"> <property name="prefix" value="" /> <property name="suffix" value=".vm"></property> <property name="contentType" value="text/html;charset=UTF-8" /> <property name="layoutUrl" value="layout/default.vm" /> </bean> VelocityLayoutViewResolver 中的关键字“layoutUrl”如何工作? 回答1 将动态网页分为布局部分和内容部分是很常见的。 布局部分可能由页眉、页脚、侧边栏、导航等组成。 元素意味着在每个响应中看起来或多或少相同,也就是说。 但是内容部分不同,因为那是动作发生的地方,对吧? 布局和内容应该在不同的 .vm 文件中分开,这样布局只需设计(和更改)一次,内容部分不必重复任何内容。 问题是如何将这两个部分放在每个响应中。 一种方法是解析每个内容文件中的布局文件。 但是由于布局通常包含内容