struts对国际化的支持

本文详细介绍了如何在Struts框架中进行国际化配置,包括添加国际化资源文件并将其转换为Unicode编码,以及如何在JSP页面中使用bean:message标签读取国际化消息文本。同时,阐述了如何利用Struts将Locale信息保存到session中,实现语言自动切换。最后,讲解了创建、传递和显示国际化消息文本的方法,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、struts国际化配置
*在struts-config.xml文件中加入
<message-resources parameter="MessageResources" />


2、提供国际化资源文件
* MessageResources.properties
* MessageResources_zh_CN.properties
login.form.field.Password=\u5BC6\u7801
login.form.button.login=\u767B\u5F55
login.form.field.username=\u7528\u6237

* MessageResources_en_US.properties
中文需要转换成Unicode编码(native2ascii.exe)

3.在jsp中采用<bean:message>读取国际化消息文本
<form action="login.do" method="post">
<bean:message key="login.form.field.username"/>:<input type="text" name="username"><br>
<bean:message key="login.form.field.Password"/>:<input type="password" name="password" ><br>
<input type="submit" value="<bean:message key="login.form.button.login"/>">
</form>


4.利用struts默认将Locale放到session中的特性,我们可以完成语言的自动切换
*ChangeLanguageAction.java
//.......................................
String lang = request.getParameter("lang");
Locale locale = Locale.getDefault();
if("zh".equals(lang)){
locale = new Locale("zh", "CN");
}else if("en".equals(lang)){
locale = new Locale("en", "US");
}
//将Locale设置到session中
// request.getSession().setAttribute(Globals.LOCALE_KEY, locale);
this.setLocale(request, locale);
return mapping.findForward("index");
//.................................

5.动态消息国际化的主要三个步骤:
*创建国际化消息文本
*传递国际化消息文本
*显示国际化消息文本

如何创建国际化消息文本
理解ActionMessage和ActionMessages连个对象的区别

如何传递国际化消息文本
调用savaMessage()传递提示消息,调用savaError()传递错误消息



import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

/**
* 登录Action
* 负责取得表单数据,调用业务逻辑,返回转向信息
* @author Administrator
*
*/
public class LoginAction extends Action {

@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// LoginActionForm laf = (LoginActionForm)form;
// String username = laf.getUsername();
// String password = laf.getPassword();
// if("admin".equals(username) && "admin".equals(password)){
// //登录成功
// return mapping.findForward("success");
// }else{
// //登录失败
// return mapping.findForward("error");
// }

LoginActionForm laf = (LoginActionForm)form;
String username = laf.getUsername();
String password = laf.getPassword();
UserManager userManager = new UserManager();
ActionMessages messages = new ActionMessages();
try{
userManager.login(username, password);
//创建国际化消息
ActionMessage message = new ActionMessage("login.success",username);
messages.add("login_success_1",message);
//传递国际化消息
this.saveMessages(request, messages);
return mapping.findForward("success");
}catch(UserNotFoundException e){
e.printStackTrace();
//创建国际化消息
ActionMessage error = new ActionMessage("login.user.not.found", username);
messages.add("error_1",error);
// 传递国际化消息
this.saveErrors(request, messages);
}catch(PasswordErrorException e){
e.printStackTrace();
ActionMessage error = new ActionMessage("login.password.error");
messages.add("error_2",error);
this.saveErrors(request, messages);
}

return mapping.findForward("error");

}

}



如何显示国际化消息文本
通过<html:messages>显示提示消息和错误消息
通过<html:errors>显示错误消息(只能显示错误消息)
*如果需要特效则在国际化资源文件中加入

errors.header=<UL>
errors.prefix=<font color=red><LI>
errors.suffix=</LI></font>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值