【struts标签+jstl标签之国际化实例】
Struts提供了国际化的功能,对于一个面向各国的系统来说,是非常有帮助的。只需要提供每个国家的语言资源包,配置后即可使用。
下面来用一个登录实例来演示一下Struts的国际化配置和显示。
创建一个login_i18n_exception的javaweb项目,引入Struts的所有jar包以及jstl.jar和standard.jar.登录界面无非就是输入用户名,密码,所以ActionForm中只需要设置2个属性即可。
[java]
package com.bjpowernode.struts;
import org.apache.struts.action.ActionForm;
/**
* 登录ActionForm,负责收集表单数据
* 表单的数据必须和ActionForm的get,set一致
* @author Longxuan
*
*/
@SuppressWarnings("serial")
public class LoginActionForm extends ActionForm {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
登录时会验证密码是否正确,需要提供异常处理,本实例显示2个异常:用户名未找到,密码错误。
[java]
package com.bjpowernode.struts;
/**
* 密码错误异常
* @author Longxuan
*
*/
@SuppressWarnings("serial")
public class PasswordErrorException extends RuntimeException {
public PasswordErrorException() {
// TODO Auto-generated constructor stub
}
public PasswordErrorException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public PasswordErrorException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
public PasswordErrorException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public PasswordErrorException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
}
package com.bjpowernode.struts;
/**
* 用户未找到异常
* @author Longxuan
*
*/
@SuppressWarnings("serial")
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException() {
// TODO Auto-generated constructor stub
}
public UserNotFoundException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public UserNotFoundException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public UserNotFoundException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
}
提供用户管理类,处理用户的相关操作,这里主要处理用户登录:
[java]
package com.bjpowernode.struts;
/**
* 用户管理类
* @author Longxuan
*
*/
public class UserManager {
/**
* 简单处理登录逻辑
* @param username 用户名
* @param password 密码
*/
public void login(String username,String password){
if(!"admin".equals(username)){
throw new UserNotFoundException();
}
if(! "admin".equals(password)){
throw new PasswordErrorException();
}
}
}
现在写LoginAction的处理:
[java]
package com.bjpowernode.struts;
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 Longxuan
*
*/
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();
UserManager userManager = new UserManager();
ActionMessages messages = new ActionMessages();
try {