Struts2使用FreeMarker作为其默认的模板技术,因此Struts2对FreeMarker的支持非常良好。因此,为了Struts2应用中使用FreeMarker模板技术,只需要在struts.xml文件中进行简单配置即可。
由于FreeMarker自供的FTL指令的能力非常有限,让我们编写一些相对复杂的界面里有点力不从心。不过不用担心,Struts2已经为我们提供了额外的标签库的支持。
1.要在FreeMarker模板使用标签库,只要四步,如下:
(1)解压struts2-core-X.X.X.jar文件,把在META-INF文件夹下面的struts-tags.tld文件复制到WEB-INF文件夹下。
(2)在web.xml文件中启动JSPSupportServlet.代码如下:
<servlet>
<!-- define a JspSupportServlet Object -->
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<!-- setting JspSupportServlet auto start -->
<load-on-startup>1</load-on-startup>
</servlet>
(3)在FreeMarker模板中使用assign指令导入标签库。代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> 注:这里我把struts-tags.tld放在WEB-INF下面
(4)现在我们可以在FreeMarker模板中使用标签了,示例代码如下:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<@s.form action="login">
<@s.textfield name="username" label="username"/>
<@s.submit value="login" />
</@s.form >
2.登录示例:
(1)在WEB-INF文件夹下面建立一个名为ftl的文件夹,其实就是FreeMarker容器,我们把所有的ftl文件都放在里面。
现在我们先在下面建立三个名字分别为login.ftl,welcome.ftl,showinfo.ftl的文件。
login.ftl代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<html>……
<body>
please input username and password login<br>
<@s.form action="Login.action">
<@s.textfield name="username" label="username"/>
<@s.password name="password" label="password" />
<@s.submit value="submit" />
</@s.form >
</body>
</html>
welcome.ftl代码如下:
<html>…WelCome,${username},you logined!<br>
<a href="ShowInfo.action">Show Information</a>…</html>
showinfo.ftl
(2)从上面的ftl中我们可以看出,我们必须建立两个Action。
我是在com.test.action包下建立Action的。
LoginAction.java ShowInfo.java
(3)剩下的就是配置文件啦,也就是struts.xml
代码片段如下:
<!-- 因为浏览者无法直接访问WEB-INF/ftl路径下的资源,所以我们在struts.xml文件中配置下面片段代码。 也就是配置了一个能匹配所有请求的Action,该Action被映射到一个动态Result. -->
<action name="*">
<result type="freemarker">/WEB-INF/ftl/{1}.ftl</result>
</action>
<!-- define a LoginAction -->
<action name="Login" class="com.test.action.LoginAction">
<result name="error" type="freemarker">/WEB-INF/ftl/error.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/welcome.ftl</result>
</action>
<action name="ShowInfo" class="com.test.action.ShowInfo">
<result name="login" type="freemarker">/WEB-INF/ftl/login.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/showinfo.ftl</result>
</action>
以上内容转自:FreeMarker作为Struts2的视图
3、国际化
类似JSP+Struts2的国际化,可参考:Struts2的国际化
(1)准备资源属性文件
baseName_language_country.properties
baseName_language.properties
baseName.properties
(2)Struts2加载全局资源文件
加载全局资源文件的方式是通过配置常量来实现的。(struts.custom.i18n.resources)
具体配置:在struts.properties配置文件中增加以下信息
struts.custom.i18n.resources= baseName(文件名,不含后缀)
(3)访问国际化资源
ftl页面输出:
A:不带占位符的信息加载
login.title=welcome into page
<@s.text name="login.title"/> 用name属性来加载资源文件的key值。
或<@s.property value="%{getText('login.title')}"/>
B:带占位符的信息加载
login.title=welcome {0} into {1} page
<@s.text name="login.title">
<@s.param>hello</@s.param>
<@s.param>index</@s.param>
</@s.text>或
<@s.property value="%{getText('login.title',{'hello','index'})}"/>
C:在表单标签中加载信息
login.name=login name
<@s.textfield label="%{getText('login.name')}" name="name"/>
<@s.textfield label="%{getText('login.title',{'hello','index'})}" name="name2"/>
如果占位符对应的参数来自Action,那么可以直接在action中调用国际化返回一个参数变量即可。
<@s.textfield label="%{tab1}" name="address3"/>或
<@s.textfield label="${tab1}" name="address5"/>均可正常显示。
Action中访问:
在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。
login.title=welcome into page
String[] mess= new String[]{"数组占位值1","数组占位值2"};
System.out.println(getText("login.title",mess));
String mes1= "单一占位值1";String tab2= "单一占位值2";
System.out.println(getText("login.title",new String[]{mes1,mes2}));
以上显示均通过测试。
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://aumy2008.blogbus.com/logs/42433426.html
由于FreeMarker自供的FTL指令的能力非常有限,让我们编写一些相对复杂的界面里有点力不从心。不过不用担心,Struts2已经为我们提供了额外的标签库的支持。
1.要在FreeMarker模板使用标签库,只要四步,如下:
(1)解压struts2-core-X.X.X.jar文件,把在META-INF文件夹下面的struts-tags.tld文件复制到WEB-INF文件夹下。
(2)在web.xml文件中启动JSPSupportServlet.代码如下:
<servlet>
<!-- define a JspSupportServlet Object -->
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<!-- setting JspSupportServlet auto start -->
<load-on-startup>1</load-on-startup>
</servlet>
(3)在FreeMarker模板中使用assign指令导入标签库。代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> 注:这里我把struts-tags.tld放在WEB-INF下面
(4)现在我们可以在FreeMarker模板中使用标签了,示例代码如下:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<@s.form action="login">
<@s.textfield name="username" label="username"/>
<@s.submit value="login" />
</@s.form >
2.登录示例:
(1)在WEB-INF文件夹下面建立一个名为ftl的文件夹,其实就是FreeMarker容器,我们把所有的ftl文件都放在里面。
现在我们先在下面建立三个名字分别为login.ftl,welcome.ftl,showinfo.ftl的文件。
login.ftl代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<html>……
<body>
please input username and password login<br>
<@s.form action="Login.action">
<@s.textfield name="username" label="username"/>
<@s.password name="password" label="password" />
<@s.submit value="submit" />
</@s.form >
</body>
</html>
welcome.ftl代码如下:
<html>…WelCome,${username},you logined!<br>
<a href="ShowInfo.action">Show Information</a>…</html>
showinfo.ftl
(2)从上面的ftl中我们可以看出,我们必须建立两个Action。
我是在com.test.action包下建立Action的。
LoginAction.java ShowInfo.java
(3)剩下的就是配置文件啦,也就是struts.xml
代码片段如下:
<!-- 因为浏览者无法直接访问WEB-INF/ftl路径下的资源,所以我们在struts.xml文件中配置下面片段代码。 也就是配置了一个能匹配所有请求的Action,该Action被映射到一个动态Result. -->
<action name="*">
<result type="freemarker">/WEB-INF/ftl/{1}.ftl</result>
</action>
<!-- define a LoginAction -->
<action name="Login" class="com.test.action.LoginAction">
<result name="error" type="freemarker">/WEB-INF/ftl/error.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/welcome.ftl</result>
</action>
<action name="ShowInfo" class="com.test.action.ShowInfo">
<result name="login" type="freemarker">/WEB-INF/ftl/login.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/showinfo.ftl</result>
</action>
以上内容转自:FreeMarker作为Struts2的视图
3、国际化
类似JSP+Struts2的国际化,可参考:Struts2的国际化
(1)准备资源属性文件
baseName_language_country.properties
baseName_language.properties
baseName.properties
(2)Struts2加载全局资源文件
加载全局资源文件的方式是通过配置常量来实现的。(struts.custom.i18n.resources)
具体配置:在struts.properties配置文件中增加以下信息
struts.custom.i18n.resources= baseName(文件名,不含后缀)
(3)访问国际化资源
ftl页面输出:
A:不带占位符的信息加载
login.title=welcome into page
<@s.text name="login.title"/> 用name属性来加载资源文件的key值。
或<@s.property value="%{getText('login.title')}"/>
B:带占位符的信息加载
login.title=welcome {0} into {1} page
<@s.text name="login.title">
<@s.param>hello</@s.param>
<@s.param>index</@s.param>
</@s.text>或
<@s.property value="%{getText('login.title',{'hello','index'})}"/>
C:在表单标签中加载信息
login.name=login name
<@s.textfield label="%{getText('login.name')}" name="name"/>
<@s.textfield label="%{getText('login.title',{'hello','index'})}" name="name2"/>
如果占位符对应的参数来自Action,那么可以直接在action中调用国际化返回一个参数变量即可。
<@s.textfield label="%{tab1}" name="address3"/>或
<@s.textfield label="${tab1}" name="address5"/>均可正常显示。
Action中访问:
在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。
login.title=welcome into page
String[] mess= new String[]{"数组占位值1","数组占位值2"};
System.out.println(getText("login.title",mess));
String mes1= "单一占位值1";String tab2= "单一占位值2";
System.out.println(getText("login.title",new String[]{mes1,mes2}));
以上显示均通过测试。
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://aumy2008.blogbus.com/logs/42433426.html