文档章节

struts标签+jstl标签之国际化实例

白志华
 白志华
发布于 2015/10/18 10:55
字数 1485
阅读 2
收藏 0
点赞 0
评论 0

      Struts提供了国际化的功能,对于一个面向各国的系统来说,是非常有帮助的。只需要提供每个国家的语言资源包,配置后即可使用。


      下面来用一个登录实例来演示一下Struts的国际化配置和显示。


      创建一个login_i18n_exception的javaweb项目,引入Struts的所有jar包以及jstl.jar和standard.jar。登录界面无非就是输入用户名,密码,所以ActionForm中只需要设置2个属性即可。

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个异常:用户名未找到,密码错误。

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
	}

}

      提供用户管理类,处理用户的相关操作,这里主要处理用户登录:

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的处理:

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 {
			//用户登录
			userManager.login(username, password);
			
			//获取登录成功的国际化消息
			ActionMessage success= new ActionMessage("login.success",username);
			messages.add("login_success_1",success);
			
			//传递消息
			this.saveMessages(request, messages);
			
			return mapping.findForward("success");
			
		} catch (UserNotFoundException e) {
			
			e.printStackTrace();
			
			//获取登录成功的国际化消息
			ActionMessage error = new ActionMessage("login.user.not.found",username);
			messages.add("login_error_1",error);
			
			//传递消息
			this.saveErrors(request, messages);			
			
		} catch (PasswordErrorException e) {
			
			e.printStackTrace();
			
			//获取登录成功的国际化消息
			ActionMessage error = new ActionMessage("login.user.password.error");
			messages.add("login_error_2",error);
			
			//传递消息
			this.saveErrors(request, messages);
			
		}		
		return mapping.findForward("error");
	}

}


      来一个手动切换语言的类,方便演示:

package com.bjpowernode.struts;

import java.util.Locale;

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;

/**
 * 完成语言的手动切换
 * @author Longxuan
 *
 */
public class ChangeLanguageAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		//获取语言
		String lang = request.getParameter("lang");		
		String[] split = lang.split("-");
		
		//设置语言
		Locale locale = new Locale(split[0],split[1]);
		this.setLocale(request, locale);

		return mapping.findForward("login");
	}	
}

      新建国际化信息文件:创建resource包,创建 英文语言包MessageBundle_en_US.properties,中文语言包MessageBundle_zh_CN.properties,默认语言包MessageBundle.properties 这3个语言包。具体内容如下:

英文语言包和默认语言包设置成一样的:

# -- standard errors --
errors.header=<UL>
errors.prefix=<font color="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>
login.form.field.username=User Name
login.form.field.password=Password
login.form.button.login=Login
login.success={0},Login Succedd!!
login.user.not.found=Use cant be found! Username=[{0}]
login.user.password.error=Password  Error!
中文语言包:
# -- standard errors --
errors.header=<UL>
errors.prefix=<font color="red"><LI>
errors.suffix=</LI></font>
errors.footer=</UL>
login.form.field.username=\u7528\u6237\u540D
login.form.field.password=\u5BC6\u7801
login.form.button.login=\u767B\u5F55
login.success={0}\uFF0C\u767B\u5F55\u6210\u529F\uFF01
login.user.not.found=\u7528\u6237\u672A\u627E\u5230\uFF0C\u7528\u6237\u540D\uFF1A\u3010{0}\u3011
login.user.password.error=\u5BC6\u7801\u9519\u8BEF

      把login.jsp源码也贴出来:

<%@ page language="java" contentType="text/html; charset=GB18030"
	pageEncoding="GB18030"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<!-- ${sessionScope['org.apache.struts.action.LOCALE']}可以获取到当前设置的语言 -->
<fmt:setLocale value="${sessionScope['org.apache.struts.action.LOCALE']}" />
<fmt:setBundle basename="resource.MessageBundle" />
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
		<title>Struts登录</title>
	</head>
	<body>
		<a href="changelang.do?lang=zh-cn">中文登录</a>|
		<%--<a href="changelang.do?lang=en-us">English Login</a><br>
    <html:link action="changelang.do?lang=zh-cn">中文登录</html:link>|--%>
		<html:link action="changelang.do?lang=en-us">English Login</html:link>
		<hr>
		<html:errors />
		<hr>
		<h3>
			struts标签读取国际化文件
		</h3>

		<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="text" name="password" />
			<br />
			<input type="submit"
				value="<bean:message key="login.form.button.login"/>" />
		</form>
		<hr>
		<h3>
			jstl读取国际化文件
		</h3>
		<form action="login.do" method="post">
			<fmt:message key="login.form.field.username" />
			:
			<input type="text" name="username" />
			<br />
			<fmt:message key="login.form.field.password" />
			:
			<input type="text" name="password" />
			<br />
			<input type="submit"
				value="<fmt:message key="login.form.button.login"/>" />
		</form>

	</body>
</html>
login_success.jsp:

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<!-- message 属性设置为true,则读取message中的消息,false,则读取error中的消息。 saveMessages/saveErrors-->
	<html:messages id="msg" message="true">
		<bean:write name="msg"/>
	</html:messages>
</body>
</html>

      最后的最后,在web.xml中配置一下struts:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>


  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  
</web-app>

在Struts-config.xml中配置action,actionform等信息:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
	<form-beans>
		<form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"></form-bean>
	</form-beans>
	
	<action-mappings>
		<action path="/login" 
				type="com.bjpowernode.struts.LoginAction"
				name="loginForm"
				scope="request" >
			<forward name="success" path="/login_success.jsp"></forward>
			<!--<forward name="error" path="/login_error.jsp"></forward>-->
			<forward name="error" path="/login.jsp"></forward>
		</action>
		<action path="/changelang"
				type="com.bjpowernode.struts.ChangeLanguageAction"
				>
			<forward name="login" path="/login.jsp" redirect="true"></forward>
		</action>
	</action-mappings>
	
	
	<message-resources parameter="resource.MessageBundle"></message-resources>
</struts-config>

      到此实例结束。点击这里查看效果。也可以下载源码。最后来2张效果图吧。


   





版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/xiaoxian8023/article/details/11551559

共有 人打赏支持
白志华
粉丝 29
博文 265
码字总数 57524
作品 0
长沙
程序员
struts2的项目移到springmvc上

今天蛋疼了。项目需要,一个原先用struts2的项目要移到一个springmvc框架的项目上。之前以为很简单,原先的action换成controller,DAO换成service就行,没想到做的时候发现最大的难点是以前j...

王小明123
2012/10/16
0
5
taglib prefix="s" uri="/struts-tags"

这一句<%@ taglib prefix="s" uri="/struts-tags" %>就是从地址/struts-tags下面寻找标签库,可能有人会好奇这个地址在哪里呢?答案是它定义在Struts 2库文件struts2-core-2.0.11.jar里面的文...

小果果x
2015/01/04
0
0
Stripes tips(1)-Stripes简介

初识 Stripes 和我们熟悉 Struts 1 和 Struts 2 类似,Stripes 同样是一种展示层框架,用于快速构建web程序。在使用Struts 1,WebWork 和 Struts 2 等框架的时候,通常需要大量额外的 XML 配...

晨曦之光
2012/03/09
0
0
Dwr技术与ssh2的相关配置技术摘要

平台:win7 myeclipse10 struts2 hibernate 3.3 spring3.0 相关重要文件: web.xml dwr.xml dwr.js engine.js util.js Common-logging.jar ssh2的配置 1、引入struts2 hibernate3.3 spring 3......

西行侠客
2014/03/26
0
0
与区别

我们都知道在jsp中include有两种形式,分别是Include指令:和include动作:。前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的...

陶邦仁
2015/04/08
0
0
Struts 源码学习之ActionServlet ( 一)

Struts 源码最新版本为 struts-1.3.8-src.zip ( 12-Mar-2007 00:06 ) 学习笔记使用struts-1.3.5-src.zip 的源码, 下载地址:http://archive.apache.org/dist/struts/source/ 1. 在web.x......

xiahuawuyu
2012/05/17
0
0
struts2整合velocity

web.xml文件: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:......

爱coding
2012/04/10
0
0
MVC 框架 - Apache Struts

Struts 是 Apache软件基金会(ASF)赞助的一个开源项目。它最初是 Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web...

匿名
2008/09/07
0
8
为什么有了Struts 还要Spring MVC

很多人学习了ssh ,都晓得struts最早被人用来控制表现层,但是struts已经有了mvc 为什么还有spring mvc呢? 所以我稍微查阅了一些资料,总结了一下他们的区别: 1. 机制。spring mvc 的入口是...

dengzhangtao
2010/12/06
0
0
用Struts建立MVC应用的介绍【转】

Model 1 和Model 2简介 我们在开发Web应用时经常提到的一个概念是Model 1/Model 2,那么到底它是什么意思呢?其实它是对采用JSP技术构成Web应用的不同模型的描述。下面对这个概念做一个简单的...

磊神Ray
2011/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)

一、安装环境 1、本机系统:Windows 10 Pro(64位) 2、Node.js:v6.9.2LTS(64位) 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进...

sprouting
15分钟前
0
0
Redisson

了解了Redisson,发现使用挺简单的,接下来准备深入学习一下。 Redisson介绍 Redisson是架设于Redis基础之上的一个Java驻内存数据网格(In-Memory Data Grid) Redisson在基于NIO的Netty框架上...

to_ln
15分钟前
0
0
python有哪些好玩的应用实现,用python爬虫做一个二维码生成器

python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询、cmd版的实时翻译、快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给...

python玩家
15分钟前
0
0
jq 判断复选框是否被选中,复选框后台接收

1. 效果 2. 代码 html部分: JS部分: var rememberLogin = $("#rememberLoginId").is(':checked')//获取复选框是否被选中 var rememberLoginval = $("#rememberLoginId").attr('value')//拿......

Lucky_Me
22分钟前
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
23分钟前
0
0
《趣谈网络协议》之为什么要学习网络协议?

一、协议 1.协议的定义 简单说协议就是一个规则,保证沟通交流双方可以互相听懂、理解或者可以双方合作可以顺利进行的一个约定和规则。 2.生活中例子 (1)有一种叫“程序猿”的物种,敲着一种...

aibinxiao
24分钟前
1
0
Python数据分析numpy基础-维度的认识

什么是多维数组? 核心对象是同型的多维数组(简单理解就是一个表格,通常内容都是些数字),具有相同的数据类型。 概念: 1. axes(轴):数组的维度统称为轴。 2. rank:轴的数量称为rank。...

十年磨一剑3344
28分钟前
0
0
Java 正则表达式相关资料

1.java正则表达式过滤html标签

IT追寻者
32分钟前
0
0
点赞出现数字变大效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container{ padding: 50px; border: 1px solid #dddddd; } .item{ position: relative; } ......

南桥北木
50分钟前
0
0
anroid中批量将px转换成dp

package com.qu;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class Aaaa {public static void main(String[] args) {String fi......

android-key
52分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部