- 浏览: 3012172 次
- 性别:
- 来自: 河南
文章分类
- 全部博客 (340)
- Java综合 (26)
- 程序人生 (53)
- RIA-ExtJS专栏 (18)
- RIA-mxGraph专栏 (4)
- RIA-Flex4专栏 (43)
- 框架-Spring专栏 (16)
- 框架-持久化专栏 (22)
- 框架-Struts2专栏 (11)
- 框架-Struts专栏 (12)
- SQL/NOSQL (12)
- 报表/图表 (2)
- 工作流 (5)
- XML专栏 (4)
- 日常报错解决方案 (5)
- Web前端-综合 (12)
- Web/JSP (14)
- Web前端-ajax专栏 (14)
- Web前端-JQuery专栏 (9)
- IDE技巧 (6)
- FILE/IO (14)
- 远程服务调用 (2)
- SSO单点登录 (2)
- 资源分享 (22)
- 云计算 (1)
- 项目管理 (3)
- php专栏 (1)
- Python专栏 (2)
- Linux (1)
- 缓存系统 (1)
- 队列服务器 (1)
- 网络编程 (0)
- Node.js (1)
最新评论
-
hui1989106a:
我的也不能解压,360和好压都试了,都不行
《Spring in Action》完整中文版分享下载 -
temotemo:
这些example有些过时了,官方建议使用HBase-1.0 ...
Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询 -
zy8102:
非常感谢~
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
重命名了一下搞定了
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
为什么下载以后老解压不了呢?
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载
这里的国际化其实跟第五篇文章和第一篇文章要实现的效果一样,也是登录验证信息,只不过是国际化处理而已,多了几个国际化的配置文件
这里我要说下,可能第一篇文章和第五篇文章看完后,好多人都还有疑问
关于第一篇文章的疑问就是,为什么msg.properties这个配置文件会为登录页面服务,并且会显示用户名和密码的错误信息
首先呢我们看,由于资源文件和验证规则文件都在struts-config.xml中配置了,虽然msg.properties并没有出现跟登录页面对应的loginname和pwd,但是我们看到了validator.xml中出现了这两个属性,并且将两个属性对应出错的信息关联到msg.properties中去,因此呢,登录页面就通过validator.xml与msg.properties关联起来了,至于为什么会显示错误信息呢
我不得不提上篇文章中介绍到的html:message标签了,这个标签的作用就是
在页面中取出消息:
错误消息:<html:errors>, <html:messages id="msg">...
提示消息:<html:messages id="msg" message="true">
这里的id="msg"这是种规定写法,不能改成别的了,所以如果取的是错误消息的话,messge=true就不用设置了,如第一篇文章中
<html:messages id="msg">
<li><bean:write name="msg"/></li>
</html:messages>
这个就用来显示配置文件中关于错误的信息
,如第五篇文章的话,因为在LoginForm中配置有
if(this.loginname == null || "".equals(this.loginname)){
ActionMessage msg = new ActionMessage("用户名不能为空",false);
errors.add(ActionErrors.GLOBAL_MESSAGE, msg);
}
if(this.pwd == null || "".equals(this.pwd)){
ActionMessage msg = new ActionMessage("密码不能为空",false);
errors.add(ActionErrors.GLOBAL_MESSAGE, msg);
}
这段代码起了作用,就在页面上匹配的显示出来了,其实我上面说的关于第五篇文章的疑问其实不用疑问,因为他是将验证放在LoginForm中,而LoginForm正好是用来接收登录页面信息的,所以自然就匹配验证上了
关于这一篇要讲的国际化,其实也是跟第一篇文章差不多,就多几个资源配置文件,不过不用配置验证文件,而是将页面的文本域属性名称值直接配置到资源文件中,而不像第一篇那样通过validator.xml与资源文件联系起来了
login.jsp
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><bean:message key="title"/></title>
</head>
<body>
<h3><bean:message key="title"/></h3><hr/>
<ul>
<html:messages id="msg">
<li style="color:red"><bean:write name="msg"/></li>
</html:messages>
</ul>
<form action="login.do" method="post">
用户:<input type="text" name="loginname" value="${param.loginname}"><br/>
密码:<input type="text" name="pwd" value="${param.pwd }"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
关于表单元素完全也可以通过HTML标签表示,效果是一样的
<html:form action="login.do" method="post">
<bean:message key="loginname"/>:<html:text property="loginname"/> <br/>
<bean:message key="pwd"/>:<html:password property="pwd" redisplay="false" /> <br/>
<html:submit><bean:message key="button.submit"/></html:submit>
</html:form>
看到上面的html:messgaes没有,由于没有配置属性message=true,所以显示的是错误信息,关于错误信息在LoginForm中都已经通过ActionErrors写好了
LoginForm.java
package com.javacrazyer.web.formbean;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
/**
* 用来收集客户端提交数据.
* 要收集数据的属性的名一定要跟请求参数名相同
*
*/
public class LoginForm extends ActionForm {
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(this.loginname == null || "".equals(this.loginname)){
ActionMessage msg = new ActionMessage("loginname.error");
errors.add("loginname", msg);
}
if(this.pwd == null || "".equals(this.pwd)){
ActionMessage msg = new ActionMessage("pwd.error");
errors.add("pwd", msg);
}
return errors;
}
private static final long serialVersionUID = 6619272689058619128L;
private String loginname;
private String pwd;
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
msg.properties
title=Java\u56FD\u9645\u5316\u652F\u6301
loginname=\u7528\u6237\u540D
pwd=\u5BC6\u7801
button.submit=\u63D0\u4EA4
button.reset=\u91CD\u7F6E
welcome= \u6B22\u8FCE\: {0}, \u5F53\u524D\u65F6\u95F4\: {1}
loginname.error=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
pwd.error=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
msg_en_US.properties
title=Java I18N
loginname=LoginName
pwd=Password
button.submit=Submit
button.reset=Reset
welcome= Welcome: {0}, currDate: {1}
loginname.error= LoginName Can not be Null!
pwd.error=Password Can not be Null\!
msg_zh_CN.properties
title=Java\u56FD\u9645\u5316\u652F\u6301
loginname=\u7528\u6237\u540D
pwd=\u5BC6\u7801
button.submit=\u63D0\u4EA4
button.reset=\u91CD\u7F6E
welcome= \u6B22\u8FCE\: {0}, \u5F53\u524D\u65F6\u95F4\: {1}
loginname.error=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
pwd.error=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
LoginAction.java
package com.javacrazyer.web.action;
import java.util.Date;
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;
import com.javacrazyer.service.UserService;
import com.javacrazyer.web.formbean.LoginForm;
/**
* 业务控制器:控制业务处理的流程
*
*/
public class LoginAction extends Action {
//具体业务流程处理方法,由Struts框架回调
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//取数据
LoginForm loginForm = (LoginForm)form;
String loginname = loginForm.getLoginname();
String pwd = loginForm.getPwd();
//调用业务逻辑
UserService service = new UserService();
boolean flag = service.validate(loginname, pwd);
//跳转
if(flag){
//成功
//创建一个普通消息
ActionMessage msg = new ActionMessage("welcome", new Object[]{loginname, new Date()});
//添加到消息容器中
ActionMessages msgs = new ActionMessages();
msgs.add("succ", msg);
//保存到请求属性域内
this.saveMessages(request, msgs);
return mapping.findForward("succ");
}else{
//失败
request.setAttribute("errorMsg", "你输入的用户名或密码有误,请返回,重新登录!!!");
return mapping.findForward("failure");
}
}
}
WEB-INF/struts-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!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 Bean Definitions -->
<form-beans>
<form-bean name="loginForm" type="com.javacrazyer.web.formbean.LoginForm"></form-bean>
</form-beans>
<!-- =========================================== Action Mapping Definitions -->
<action-mappings>
<action path="/login"
name="loginForm"
type="com.javacrazyer.web.action.LoginAction"
input="/login.jsp">
<forward name="succ" path="/succ.jsp"/>
<forward name="fail" path="/failure.jsp"/>
</action>
</action-mappings>
<message-resources parameter="msgs"/>
</struts-config>
succ.jsp
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<html:messages id="msg" message="true">
<bean:write name="msg"/>
</html:messages>
</body>
</html>
看到succ.jsp的messge=true这个属性没有,这就是要显示提示信息,而非错误信息,这些提示信息在LoginAction处理登录成功的代码中ActionMessages已经写好了
failure.jsp
<%@ page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录失败</title>
</head>
<body>
<h3>登录失败</h3><hr/>
<h2 style="color:red">可能的原因是:${errorMsg}</h2>
</body>
</html>
好了,最后回顾下struts的国际化操作要点吧
1. 提供资源文件:msgs.properties,msgs_zh_CN.properties,....
2. 在struts配置文件中用<message-resources parameter=“资源文件的基本名”>元素来声明资源文件基本名
3. 页面中:
1)显示文件信息需要使用:<bean:message key="..."/>
2) 程序中怎么产生国际化的提示消息和错误消息:
ActionMessage msg = new AcctionMessage("key", Object[] );
如果是错误信息
ActionErrors errors = new ActionErrors();
errprs.add("loginname",msg);
如果是提示信息
ActionMessages msgs = new ActionMessages();
msgs.add("succ", msg);
发表评论
-
Struts温习(11)--Action中使用BeanUtils.copyProperties
2011-05-06 09:32 2283from:http ... -
Struts温习(10)--利用Token解决重复提交
2010-11-14 23:55 2153平时网上注册大家都经历过,比如用户在注册成功之后,再打击后退按 ... -
Struts温习(9)--关于异常的处理
2010-11-14 22:45 1151本示例是以一个计算器的例子来写的,为了方便,这里处理的是算术异 ... -
Struts温习(8)--文件上传
2010-11-14 22:26 1169关于Struts上传的之前已经讲过,具体请看这里 如果需要更 ... -
Struts温习(6)--taglib标签的使用
2010-11-12 16:31 3410关于taglib的标签使用,我倒是不太喜欢,本人更倾向于使用J ... -
Struts温习(5)--ActionForm的validator方法验证
2010-11-12 15:06 1815现在这个验证呢,跟第一篇文章的那个还有所不一样,之前的是配置资 ... -
Struts温习(4)--自定义java.util.Date转换器
2010-11-12 14:40 2369在Struts开发中经常可以发现,用户提交的请求数据中, ... -
Struts温习(3)--DispactherAction的用法
2010-11-12 14:14 1361首先我们来考虑一个问 ... -
Struts温习(2)--工作原理解析
2010-11-12 11:43 1519了解一个框架,必须得 ... -
Struts温习(1)--最基础的示例
2010-11-12 10:39 2460有关Hibernate的知识大部分都已经温习完毕,今天开始转向 ... -
Struts中上传文件需要注意的地方
2010-03-18 14:23 2442今天突然想研究下Struts的上传功能,没想到搞了两个小时才搞 ...
相关推荐
struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...
赠送jar包:struts2-json-plugin-2.3.24.jar; 赠送原API文档:struts2-json-plugin-2.3.24-javadoc.jar; 赠送源代码:struts2-json-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-...
2017年7月7日,Apache Struts发布最新的安全公告,Apache Struts2-strus1-plugin插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9791(S2-048),主要受影响的Struts版本为:2.3.x。 攻击者可以构造恶意的字段值...
struts1.38包,struts-core-1.3.8.jarstruts1.38包,struts-core-1.3.8.jar
赠送jar包:struts-core-1.3.8.jar; 赠送原API文档:struts-core-1.3.8-javadoc.jar; 赠送源代码:struts-core-1.3.8-sources.jar; 赠送Maven依赖信息文件:struts-core-1.3.8.pom; 包含翻译后的API文档:struts...
`struts-2.3.16-all`这个压缩包包含了Struts 2框架的版本2.3.16的所有组件和相关资源,这对于我们深入了解和使用Struts 2框架具有重要意义。 首先,Struts 2的核心组件包括Action、Result、Interceptor和ValueStack...
包含Struts2框架的核心类库,以及Struts2的第三方插件类库 struts2-core-2.0.14 xwork-2.0.7 ognl-2.6.11 commons-logging-1.0.4 freemarker-2.3.8 等等。
struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jarstruts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar
3. **国际化支持**:`struts-tiles.jar`提供了Tiles框架,可以方便地构建可重用的页面布局和组件,支持多语言国际化。 4. **其他依赖库**:可能包括`commons-logging.jar`、`commons-lang.jar`、`commons-...
struts-2.3.7-all jar包
struts2-bean-validation-plugin-2.5.2.jar, struts2-cdi-plugin-2.5.2.jar, struts2-config-browser-plugin-2.5.2.jar, struts2-convention-plugin-2.5.2.jar, struts2-core-2.5.2.jar, struts2-dwr-plugin-2.5.2....
struts-2.3.34-all.rar,包括app,docs,lib,src
这个"struts-2.5.2-all.zip"压缩包包含了Struts 2.5.2版本的所有必需组件,方便开发者在项目中快速集成和使用。 首先,我们来看看Struts 2的核心概念: 1. **Action类**:它是处理用户请求的核心,负责业务逻辑的...
struts是开源框架。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。
这个插件允许开发者在Struts 2中轻松地创建能够返回JSON的Action,使得前端(通常使用JavaScript库如jQuery)可以获取到JSON数据并进行进一步处理。 现在我们来详细讨论这两个库在实际应用中的作用: 1. **json-...
struts.xml文件中新增以下内容: <!-- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...
- **国际化与本地化**:框架内置了对多语言支持的机制,方便创建国际化的应用程序。 - **插件系统**:Struts2的插件机制允许快速集成第三方库和功能,如Ajax、富客户端组件、REST服务等。 总的来说,Struts2.0.11-...
【Struts2】〖所有依赖jar包〗struts-2.3.37-lib 我寻见一片海 碧蓝且耀着光 大片船只航行其上 都向着远方 Shared by Foriver_江河 © 1997-8023 江河 All Rights Reserved.
使用Struts 1.3.8时,开发者需要配置web.xml和struts-config.xml,定义ActionServlet、Action、ActionForm等元素。此外,还需要编写ActionForm类,实现业务逻辑的Action类,以及使用JSP和Struts标签创建用户界面。 ...