写个宏
setCase.ftl:
<#assign FORM_TEXT = "单行文本"/>
<#assign FORM_MULTI_TEXT = "多行文本"/>
<#assign FORM_DATE_TEXT = "日期"/>
<#assign FORM_CURRENCY_TEXT = "货币"/>
<#assign FORM_NUMBER = "数值"/>
<#assign FORM_FLOAT_TEXT = "浮点数值"/>
<#assign FORM_INTEGER_TEXT = "整型数值"/>
<#assign FORM_CHOICE = "选择"/>
<#assign FORM_SELECT = "下拉列表"/>
<#assign FORM_CHECKBOX = "多选"/>
<#assign FORM_RADIO = "单选"/>
<#assign FORM_UNNKOWN_TEXT = "未知"/>
<#assign URI_FORM_TEXT_U = "customerform2/updateTextColumnInit"/>
<#assign URI_FORM_MULTI_TEXT_U = "customerform/updateTextFieldColumnInit"/>
<#assign URI_FORM_DATE_TEXT_U = "customerform/updateDateColumnInit"/>
<#assign URI_FORM_NUMBER_U = "customerform/updateNumberColumnInit"/>
<#assign URI_FORM_CURRENCY_TEXT_U = "customerform/updateCurrencyColumnInit"/>
<#assign URI_FORM_CHOICE_U = "customerform2/updateChoiceColumnInit"/>
<#assign URI_FORM_TEXT_D = "customerform2/deleteTextColumn"/>
<#assign URI_FORM_MULTI_TEXT_D = "customerform/deleteTextFieldColumn"/>
<#assign URI_FORM_DATE_TEXT_D = "customerform/deleteDateColumn"/>
<#assign URI_FORM_NUMBER_D = "customerform/deleteNumberColumn"/>
<#assign URI_FORM_CURRENCY_TEXT_D = "customerform/deleteCurrencyColumn"/>
<#assign URI_FORM_CHOICE_D = "customerform2/deleteChoiceColumn"/>
<#macro typeCase type>
<#if type==formConstants.FORM_TEXT>
${FORM_TEXT}
<#elseif type==formConstants.FORM_MULTI_TEXT>
${FORM_MULTI_TEXT}
<#elseif type==formConstants.FORM_DATE_TEXT>
${FORM_DATE_TEXT}
<#elseif type==formConstants.FORM_CURRENCY_TEXT>
${FORM_CURRENCY_TEXT}
<#elseif type==formConstants.FORM_NUMBER>
${FORM_NUMBER}
<#elseif type==formConstants.FORM_FLOAT_TEXT>
${FORM_FLOAT_TEXT}
<#elseif type==formConstants.FORM_INTEGER_TEXT>
${FORM_INTEGER_TEXT}
<#elseif type==formConstants.FORM_CHOICE>
${FORM_CHOICE}
<#elseif type==formConstants.FORM_CHECKBOX>
${FORM_CHECKBOX}
<#elseif type==formConstants.FORM_SELECT>
${FORM_SELECT}
<#elseif type==formConstants.FORM_RADIO>
${FORM_RADIO}
<#else>
${FORM_UNNKOWN_TEXT}
</#if>
</#macro>
<#macro typeURICase type>
<#if type==(formConstants.FORM_TEXT+"U")>
${URI_FORM_TEXT_U}
<#elseif type==(formConstants.FORM_MULTI_TEXT+"U")>
${URI_FORM_MULTI_TEXT_U}
<#elseif type==(formConstants.FORM_DATE_TEXT+"U")>
${URI_FORM_DATE_TEXT_U}
<#elseif type==(formConstants.FORM_CURRENCY_TEXT+"U")>
${URI_FORM_CURRENCY_TEXT_U}
<#elseif type==(formConstants.FORM_NUMBER+"U") || type==(formConstants.FORM_FLOAT_TEXT+"U") || type==(formConstants.FORM_INTEGER_TEXT+"U")>
${URI_FORM_NUMBER_U}
<#elseif type==(formConstants.FORM_CHOICE+"U") || type==(formConstants.FORM_CHECKBOX+"U") || type==(formConstants.FORM_SELECT+"U") || type==(formConstants.FORM_RADIO+"U")>
${URI_FORM_CHOICE_U}
<#elseif type==(formConstants.FORM_TEXT+"D")>
${URI_FORM_TEXT_D}
<#elseif type==(formConstants.FORM_MULTI_TEXT+"D")>
${URI_FORM_MULTI_TEXT_D}
<#elseif type==(formConstants.FORM_DATE_TEXT+"D")>
${URI_FORM_DATE_TEXT_D}
<#elseif type==(formConstants.FORM_CURRENCY_TEXT+"D")>
${URI_FORM_CURRENCY_TEXT_D}
<#elseif type==(formConstants.FORM_NUMBER+"D") || type==(formConstants.FORM_FLOAT_TEXT+"D") || type==(formConstants.FORM_INTEGER_TEXT+"D")>
${URI_FORM_NUMBER_D}
<#elseif type==(formConstants.FORM_CHOICE+"D") || type==(formConstants.FORM_CHECKBOX+"D") || type==(formConstants.FORM_SELECT+"D") || type==(formConstants.FORM_RADIO+"D")>
${URI_FORM_CHOICE_D}
<#else>
</#if>
</#macro>
在模板页面中使用:
<#include "/macros/setCase.ftl"/>
<@typeURICase type=("type参数"+'U')/>
<@typeCase type="type参数"/>
分享到:
相关推荐
在实际项目中,Struts2和FreeMarker的结合使用可以有效地构建出可维护、可扩展的Web应用。通过Action类处理业务逻辑,FreeMarker负责生成HTML页面,两者协同工作,为开发者提供了一种高效的开发模式。学习和掌握这两...
众所周知,struts2宣称freemarker模板中不再支持自定义标签,但如果工程UI仅用freemarker模板可以通过扩展struts标签简单实现,不是采用官方不推荐的配置JspSupportServlet实现的!内付详细说明及范例,此方法仅为团队...
Struts2是一个流行的Java Web应用程序框架,它提供了一种组织和控制MVC(模型-视图-控制器)架构的方式。而Freemarker则是一个强大的模板引擎,常用于生成动态HTML、XML或其他格式的文本。在Struts2中结合使用...
1. **添加依赖**:在项目的类路径下添加Struts2和Freemarker的相关jar包。在Maven项目中,可在pom.xml文件中添加对应的依赖项。 2. **配置Struts2**:在struts.xml文件中配置Struts2的核心过滤器,并设置Freemarker...
在本项目中,Freemarker与Struts2结合,用于生成前端页面。开发者可以使用Freemarker语法定义动态内容,如树形菜单的数据,这些数据由后端Spring或Struts2处理并传递给前端。 然后是“jquery”,这是一个广泛使用的...
Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...
- 开发者创建Freemarker模板文件(`.ftl`扩展名),放置在指定的模板目录下。 - 模板中可以引用Java对象,通过`<#...>`和`${...}`语法进行数据绑定和逻辑处理。 3. **数据传递**: - 在Controller层,通过...
在MVC模式下,Struts2框架作为Controller,负责接收用户请求,调度模型(Model)进行业务处理,并通过视图(View)展示结果。Struts2的Action类是实现业务逻辑的主要载体,它接收请求,执行操作,并通过Result返回...
`PagerTestAction.java`可能是Struts2或者类似的MVC框架中的一个Action类,负责处理用户的请求,并与`PaginationUtil`交互。Action类通常会从数据库中查询数据,然后调用`PaginationUtil`的方法来处理分页,最后将...
- **自定义指令(Custom Directives)**:允许开发者扩展FreeMarker功能,创建自己的指令。 - **模板继承(Template Inheritance)**:通过`<#import>`和`<#assign>`实现模板间的复用和继承。 - **数据类型转换**...
1. 自定义指令:可以扩展Freemarker,创建自定义指令以满足特定需求。 2. 缓存机制:Freemarker支持缓存模板,提高性能。 3. 国际化支持:通过`#localize`和`#fmt`指令处理多语言内容。 4. 静态文本和HTML转义:`...
6. **自定义指令与宏**: 开发者可以创建自定义指令来扩展Freemarker的功能,例如封装复杂的业务逻辑或重用模板片段。宏类似于函数,可以接收参数并嵌入到其他模板中。 7. **错误处理与调试**: Freemarker提供了详细...
3. **MVC模式**: 在MVC模式下,FreeMarker负责视图层,即展示层,与控制器和模型层解耦,提高了软件的可维护性和扩展性。 #### 四、FreeMarker的核心功能 - **通用目标**: - **多类型文本生成**: 支持生成多种格式...
Struts 2是Java开发Web应用的一个开源框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化的、灵活的框架,以构建可维护性高、扩展性强的企业级应用程序。在Struts 2.5.13版本中,对之前的...
Spring MVC提供了一种模块化的方式,使得应用的各个部分可以松耦合,便于测试和扩展。 Tiles是Apache Struts项目的一个组件,主要功能是页面布局。它允许开发者定义页面模板,然后通过组合这些模板来创建复杂的页面...
对于Web应用,FreeMarker内置了处理Web相关任务的功能,如HTML转义,并且可以与Model2框架(如Struts)无缝集成,作为JSP的替代。同时,它支持JSP标记库,便于MVC模式的实现,确保页面设计师和程序员的工作分离。 ...
3. **与框架的关系**:FreeMarker本身不是一个Web应用框架,而是作为框架的一个组件存在,例如可以作为Model2框架(如Struts)中的视图组件。 4. **兼容性**:FreeMarker与容器无关,这意味着它可以运行在任何支持...
FreeMarker的工作原理是,它通过模板文件(扩展名为`.ftl`)和数据模型来生成最终的输出。在FTL文件中,你可以使用特定的FreeMarker语法,如`${}`表达式和`<#...>`指令,来插入或控制动态内容。这些语法会与后台传递...
2. Struts:Struts2也支持使用FreeMarker作为模板引擎。 3. JavaServer Pages (JSP):虽然FreeMarker和JSP有相似之处,但FreeMarker通常被认为更轻量级且更易于维护。 通过阅读这份中文手册,开发者可以掌握...
Freemarker提供了安全模式,可以在不信任用户输入的情况下防止潜在的XSS攻击。通过设置安全策略,可以限制模板中可使用的指令和表达式类型。 8. 性能优化 Freemarker设计时就考虑了性能,它会缓存编译后的模板,...