当今世界是一个地球村,互联网飞速发展,为了开发的网站可以适合不同国家不同语种的人浏览,应用开发者必须与时俱进,开发出对应的应用,这就涉及到了国际化。
先看程序:
登录界面index.jsp:
<body>
<s:form action="login!login_main" method="post">
<s:textfield name="userbean.name" key="uname"><s:fielderror fieldName="username"></s:fielderror></s:textfield>
<s:password name="userbean.password" key="upass"><s:fielderror fieldName="userpass"></s:fielderror></s:password>
<s:submit label="提交"></s:submit>
</s:form>
<s:actionerror /><!-- 在用户名或者密码错误时显示错误信息,错误信息在action中用addFieldError设置 -->
</body>
验证登录的action:LoginAction.java:
package com.sc.action;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpSession;
import com.sc.dao.YongHuCaoZuo;
import com.sc.javabean.UserBean;
public class LoginAction extends BaseAction {
YongHuCaoZuo yonghucaozuo = new YongHuCaoZuo();
UserBean userbean;
public UserBean getUserbean() {
return userbean;
}
public void setUserbean(UserBean userbean) {
this.userbean = userbean;
}
public void validate() {
/*
* addActionError("错误内容"):Action级别的错误消息 this.addActionError("错误信息1");
* this.addActionError("错误信息2"); 显示消息的标签是:<s:actionerror />显示全部的
* Action级别的错误消息,可以加CSS
*
* addFieldError("字段名","错误信息")给一个字段(属性)添加错误消息 this.addFieldError("pwd",
* "错误信息1"); this.addFieldError("pwd", "错误信息2");
* 显示消息的方法1:标签是:<s:fielderror />显示全部的错误消息; 显示消息的方法2: <s:fielderror>
* <s:param>field1 </s:param> 显示指定的 field1字段的 错误消息 <s:param>field2
* </s:param> 显示指定的 field2字段的 错误消息 </s:fielderror>
* 显示消息的方法3:如果什么都不写,则默认显示在相应字段上方 addActionMessage("相关信息")
* 需要在action中重写父类的validate方法,对参数进行校验,如果校验失败。则直接写错误信息
* this.addActionMessage("信息1"); this.addActionMessage("信息2");
* 显示消息的标签是:<s2:actionmessage/>可以显示全部的消息
* 注:1、在添加第一个信息之前加上this.clearErrorsAndMessages();用来清空之前加载的错误信息
* 2、如果<head></head>之间加上<s:head/>,<s:actionerror />和<s:fielderror
* />会自动加上CSS <s:actionmessage/>则不会加载.
**/
System.out.println("进行验证...");
if (userbean.getName() == null || userbean.getPassword().equals("")) {
super.addFieldError("username", getText("error", new String[] { getText("uname") }));
}
if (userbean.getPassword() == null || userbean.getName().equals("")) {
super.addFieldError("userpass", getText("error", new String[] { getText("upass") }));
}
}
// 用户登录的方法
// yonghucaozuo是另一个包下的类的实体,本文章中没有显示出来
public String login_main()
{
UserBean user=new UserBean();
HttpSession se=request.getSession();
String sql="select * from user1 where name='"+userbean.getName()+"' and '"+userbean.getPassword()+"'";
List<UserBean> list=yonghucaozuo.dengLu(sql);
Iterator it=list.iterator();
if(it.hasNext())
{
se.setAttribute("name",userbean.getName());
request.setAttribute("list1", yonghucaozuo.allUSer("select * from user1")); //查询所有用户并显示在页面上
System.out.println(yonghucaozuo.allUSer("select * from user1").size());
return SUCCESS;
}
else
{
super.addActionError("用户名或密码错误,请重新输入");
return INPUT; <!--这里必须用input-->
}
}
struts.xml配置文件:
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.custom.i18n.resources" value="globalMessage"></constant>
<package name="struts" extends="struts-default" namespace="/">
<action name="hehe">
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/index.jsp</result>
</action>
<action name="login" class="com.sc.action.LoginAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/success.jsp</result>
<result name="input">/index.jsp</result><!--这里必须用input-->
</action>
</package>
action同包下的配置文件:
LoginAction_en_US.properties
uname=name
upass=password
title=login
error=must be input
.................(更 多属性 )
LoginAction_zh_ CN.properties
uname=\u59D3\u540D
title=login
error=must be input
.................(更 多属性 )
LoginAction_zh_ CN.properties
uname=\u59D3\u540D
upass=\u5BC6\u7801
title=\u767B\u5F55\u754C\u9762
error={0}\u5FC5\u987B\u586B
.................(更多属性)
jsp国际化思路
步骤一:
在action的.java文件同包下建立特性文件,特性文件名称是(三种):
action类名_language_country.properties
action类名_language.properties
action类名.properties
例如: LoginAction_en_US.properties和LoginAction_zh_ CN.properties分别是英语和汉语的配置文件
步骤二:
在action中写:
/**
*本方法用于没有输入账户或者密码时返回到登录界面时显示提示信息
*/
public void validate(){
System.out.println("进行验证...");
if(userbean.getName()==null||userbean.getPassword().equals("")){
//如果没有输入用户名会返回登录界面提示:用户名必须输入
super.addFieldError("username", getText("error", new String[]{getText("uname")}));
}
if(userbean.getPassword()==null||userbean.getName().equals("")){
//如果没有输入密码会返回登录界面提示:密码必须输入
super.addFieldError("userpass", getText("error", new String[]{getText("upass")}));
}
}
步骤三:
在 struts.xml中配置:
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.custom.i18n.resources" value="globalMessage"></constant>
<package name="struts" extends="struts-default" namespace="/">
<action name="hehe">
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/index.jsp</result>
</action>
<action name="login" class="com.sc.action.LoginAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<result>/success.jsp</result>
<result name="input">/index.jsp</result><!--这里必须用input-->
</action>
</package>
完成上述步骤,既可以完成登录验证和国际化了 !
完成此功能的过程中,要点击登录一次,才能显示出国际化的效果!