Freemarker+Struts2 国际化应用

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值