我转换的目的是这样的,在客户端的一个文本输入框内输入用户名和密码,他们之间以用英文逗号隔开!
整个项目里面只用到了三个类,一个User类,用类封装用户信息;一个LoginAction,这个拦截用户请求,来实现页面的跳转;最后一个是TypeConverter,这个类是用来实现类型转换的 他们在包user下面!
代码是这样的
User类:
package user;
public class User {
private String name = "";
private String pwd = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
LoginAction类:
package user;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action{
private User user;
private String tip;
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception{
if(getUser().getName().equals("hello")&&getUser().getPwd().equals("java")){
setTip("登录成功");
return "success";
}else{
setTip("登录失败,类型转换失败");
return "error";
}
}
}
TypeConverter类:
package user;
import java.util.Map;
import ognl.DefaultTypeConverter;
public class TypeConverter extends DefaultTypeConverter{
public Object convertValue(Map context, Object value, Class toType){
//如果要把字符串转换成User类型
if(User.class==toType){
User user = new User();
String [] params = (String[]) value;
String[] userValues = params[0].split(",");
user.setName(userValues[0]);
user.setPwd(userValues[1]);
return user;
}
//如果要将复合类型转换成String类型
else if(String.class==toType){
User user = (User)value;
return "<"+user.getName()+","+user.getPwd()+">";
}
return null;
}
}
这就是后台的全部代码,还有一个属性配置文件,就不贴出来了!
刚开始我不知道前台传值的时候,那个文本框的name属性的值要对应那个值,这点我貌似有些笨了,当然是action里面的属性了!
刚开始的时候我就纳闷不知道是哪个,没有和后台对应上,结果总是出现空指针异常!细节一定要把握好!
在上面的代码中,action里面有一个User类的对象user,这个对象便成为了接受前台参数的action属性
在接受这个的同时需要类型转换器转换了,上面的类型转换器是基于OGNL的,有点麻烦!
转换器里面需要实现convertValue方法,里面有三个参数,一个是Map类型的,一个是Object类型的,一个是Class类型的!
第一个参数代表了转换器的上下文,第二个是接受前台传过来的值,第三个是要转换的目标类型!
至于第一个参数,我现在还不明白,我就不明白上下文是什么概念,知道的话,帮忙解答一下,谢谢了!!!!
在转换器类里面,流程是这样的,value是前台传过来的参数,或许要纳闷为什么数组类型的了!是这样的,假如前台要传过来一个多选的下拉列表的值,我们知道我们可以使用request.getValues(name)这个可以获得传过来的所有值,说到这里大概可以理解为什么用数组了吧,因为,request.getValues()方法的返回值类型是数组类型的,我们需要满足大多数的情况,所以struts2的发明者只用数组来接受参数!貌似很智能啊!
得到了前台的参数后,我们就可以通过String类的split方法,将这个字符长以英文逗号为分割点,来获取不同的数据!
前面已经说了项目要求了--输入用户名和密码,两者用英文逗号隔开!在user类里面已经写了user属性的setXXX方法!
将前台参数分割后就可以对user类型的属性进行赋值了!到此就结束了!我也只是懂个皮毛!不对的地方,一定指出来!我也是总结一下,加深一下印象!
分享到:
相关推荐
接着,当Struts2接收到相关参数时,会自动调用自定义转换器进行转换。 6. **调试与测试** 调试自定义类型转换器通常涉及到设置断点,观察转换过程中的变量状态,以及通过单元测试确保转换逻辑的正确性。在IDE如...
### Struts自定义类型转换器 #### 一、概述 在Web开发中,表单提交的数据通常是字符串形式的,而在业务逻辑处理时往往需要将这些数据转换为其他类型的对象(如日期、数字等)。Struts框架为了更好地处理这种类型...
然而,当需要对自定义对象或者特殊的数据类型进行转换时,就需要自定义类型转换器。 **局部自定义类型转换**: 如果你只想为特定的Action中的某个字段创建类型转换器,你需要创建一个类继承自`StrutsTypeConverter`...
然而,对于如Date这样的复杂类型,需要自定义转换器来处理。 创建自定义类型转换器的步骤如下: 1. **定义转换器类**:继承`org.apache.struts2.util.FieldConverter`或`...
Struts2框架提供了强大的类型转换机制,允许开发者自定义类型转换器,以满足特定业务逻辑的需求。本文将深入探讨Struts2自定义类型转换的原理、分类以及具体实施步骤,帮助开发者更好地理解和应用这一功能。 #### ...
理解并掌握如何利用内置转换器、自定义转换器以及处理转换错误,对于构建高效、稳定的Struts2应用至关重要。通过深入学习Struts2的源码和使用相关工具,我们可以更深入地了解这些机制,并优化我们的应用程序。
6. **类型转换**:Struts2的类型转换器在处理JSON请求时起着关键作用,将JSON字符串转换为Java对象。 7. **自定义JSON序列化和反序列化**:源码中可能会包含自定义的序列化和反序列化逻辑,以便在转换过程中处理...
自定义类型转换器是Struts 2的核心特性之一,允许开发者根据业务需求定制数据转换规则。以下将详细介绍如何创建、注册以及使用自定义类型转换器。 1. **创建自定义类型转换器** - 创建一个类,实现`org.apache....
自定义类型转换器是当Struts2内置的转换器无法满足特定业务需求时,开发者自行创建的一种扩展方式。然而,这里提到的"自定义类型转换器"实际上与权限控制有关,而非类型转换。描述中的内容主要涉及的是如何实现用户...
Struts2的核心功能包括动作映射、拦截器、结果类型、插件系统等。 **JSON介绍:** JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它采用完全独立于语言的文本格式,但使用了类似于...
- **Interceptor(拦截器)**:这些是Struts2中的重要组件,它们在Action调用前后执行,提供了事务控制、日志记录、权限验证等功能。 - **配置文件**:通常有struts.xml或类似的配置文件,用于定义Action、结果...
Struts2作为一款流行的Java Web框架,其在处理用户输入数据时扮演着重要角色。...在练习中,你可以尝试创建不同的自定义转换器,并理解它们在处理不同类型数据时的作用,从而加深对Struts2数据处理机制的理解。
Struts2的类型转换是基于OGNL实现的,因此自定义转换器需要实现这个接口。然而,TypeConverter接口的`convertValue`方法比较复杂,通常我们会选择继承`DefaultTypeConverter`类来简化工作。 `DefaultTypeConverter`...
在Struts2框架中,该插件允许开发者将Action的返回结果直接转换为JSON格式,方便进行Ajax(Asynchronous JavaScript and XML)操作,提高Web应用的响应速度和用户体验。 标题"struts2-json-plugin-2.1.8.1.jar"表明...
最后,编写自定义类型转换器和拦截器,将其添加到配置文件中。 在实践过程中,你将更深入地理解Struts2的工作流程,包括请求的分发、值栈的使用、以及Result的返回。此外,通过自定义类型转换和拦截器,你将能够...
标签中的“源码”可能意味着博客会深入到Struts2框架的源代码中,解释类型转换器的工作原理和如何根据源代码实现自定义转换器。而“工具”可能指的是使用Struts2提供的工具类或API来辅助类型转换。 在`Struts2_3500...
- `xwork-core`: XWork是Struts2的基础,提供了Ognl表达式语言、类型转换、拦截器等功能。 2. **视图技术**: - `freemarker`: Struts2默认的视图模板引擎,用于动态生成HTML页面。 - `struts2-freemarker-...