下面是“Spring FreeMarker整合Struts2过程详解”的完整攻略:
1. 初步准备
- 在项目中引入Spring和Struts2框架;
- 引入FreeMarker模板引擎。
2. 添加Spring配置文件
在Spring配置文件中,需要添加以下内容:
<!-- 引入FreeMarker视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value="/WEB-INF/ftl/"/>
<property name="suffix" value=".ftl"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>
<!-- 配置FreeMarker模板引擎 -->
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="defaultEncoding">UTF-8</prop>
<prop key="locale">zh_CN</prop>
<prop key="whitespace_stripping">true</prop>
</props>
</property>
</bean>
以上配置中的 viewResolver
是Spring MVC中的视图解析器,freeMarkerConfigurer
则是FreeMarker模板引擎的配置类。
3. 添加Struts2配置
在Struts2的 struts.xml
配置文件中添加以下内容:
<!-- 配置Freemarker结果视图 -->
<result-types>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
</result-types>
<!-- 局部结果视图 -->
<action name="test" class="com.example.action.TestAction" method="test">
<result type="freemarker">/test.ftl</result>
</action>
<!-- 全局结果视图 -->
<constant name="struts.freemarker.templateSuffix" value=".ftl"/>
<constant name="struts.freemarker.defaultEncoding" value="UTF-8"/>
<constant name="struts.freemarker.contentType" value="text/html;charset=UTF-8"/>
以上配置中的 test
是一个示例 Action;struts.freemarker.*
是Struts2中使用的FreeMarker配置项。
4. 示例1:在FreeMarker中使用参数
在 WEB-INF/ftl/
目录下新建模板文件 test.ftl
,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>测试页面</title>
</head>
<body>
<h1>Hello, ${username}!</h1>
</body>
</html>
在示例Action TestAction
中添加代码:
public class TestAction extends ActionSupport {
private String username;
public String test() {
username = "张三";
return SUCCESS;
}
public String getUsername() {
return username;
}
}
以上代码中,设置了 username
的值为 "张三"。在模板文件中,使用 ${username}
引用了这个值,最终效果为在页面上显示出 "Hello, 张三!" 的文本。
5. 示例2:引入外部模板
在 WEB-INF/ftl/
目录下,新建一个名为 header.ftl
的包含模板,用于引入外部模板。内容如下:
<!DOCTYPE html>
<html>
<head>
<title>${title}</title>
</head>
<body>
在示例Action TestAction
中添加代码:
public String test() {
request.setAttribute("title", "测试页面");
return SUCCESS;
}
以上代码中,设置了 title
的值为 "测试页面",并绑定到了 HttpServletRequest
对象上,用于进行外部模板的引入。
在 test.ftl
模板中添加以下代码:
<#import "header.ftl" as header>
<@header/>
<h1>Hello, ${username}!</h1>
</body>
</html>
以上代码中,使用 <#import "header.ftl" as header>
引入了外部模板 header.ftl
,并给它取了一个别名 header
;在模板文件中,使用 <@header/>
片段指令插入了这个外部模板,最终效果为将页面分为两部分,一部分进行了独立的处理,另一部分用于输出数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring FreeMarker整合Struts2过程详解 - Python技术站