struts2 的 map支持!!高手帮忙

云飞_ 2008-09-19 04:16:53

LoginAction。java

public class LoginAction implements Action {
private Map user;

private String tip;

public void setTip(String tip) {
this.tip = tip;
}

public String getTip() {
return (this.tip);
}

public String execute() throws Exception {

System.out.println("((User)getUser().get(0)).getName()================"
+ ((User) getUser().get(0)).getName());
if (((User) getUser().get(0)).getName().equals("scott")
&& ((User) getUser().get(0)).getPass().equals("tiger")) {
setTip("转换成功");
return SUCCESS;
} else {
setTip("转换失败");
return ERROR;
}
}

public Map getUser() {
return user;
}

public void setUser(Map user) {
this.user = user;
}

}
===========================================
User。java
package com.cai.map;

/**
* @author yeeku.H.lee kongyeeku@163.com
* @version 1.0 <br>
* Copyright (C), 2005-2008, yeeku.H.Lee <br>
* This program is protected by copyright laws. <br>
* Program Name: <br>
* Date:
*/
public class User {
private String name;

private String pass;

public void setName(String name) {
this.name = name;
}

public void setPass(String pass) {
this.pass = pass;
}

public String getName() {
return (this.name);
}

public String getPass() {
return (this.pass);
}
}
==============================
UserConverter。java
package com.cai.map;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.struts2.util.StrutsTypeConverter;

/**
* @author yeeku.H.lee kongyeeku@163.com
* @version 1.0 <br>
* Copyright (C), 2005-2008, yeeku.H.Lee <br>
* This program is protected by copyright laws. <br>
* Program Name: <br>
* Date:
*/

public class UserConverter extends StrutsTypeConverter {
// 字符串转向复合类
public Object convertFromString(Map context, String[] values, Class toClass) {
System.out.println("values.length:" + values.length);
if (values.length > 1) {

Map result = new HashMap();
for (int i = 0; i < values.length; i++) {
User u = new User();
String[] uservalues = values[i].split(",");

u.setName(uservalues[0]);
u.setPass(uservalues[1]);
result.put(u.getName(), u);
}
return result;

} else {
// 长度为1的情况
User user = new User();
String[] uservalues = values[0].split(",");
user.setName(uservalues[0]);
user.setPass(uservalues[1]);
return user;
}

}

// 复合类型转换成字符串类型
public String convertToString(Map context, Object o) {
// 单个的User类型
if (o instanceof User) {
User u = (User) o;
return u.getName() + "," + u.getPass();
} else if (o instanceof Map) {
Map u = (Map) o;

String result = "[";
Set iter = u.keySet();
while (iter.iterator().hasNext()) {

User user = (User) iter.iterator().next();
result += "<" + user.getName() + "," + user.getPass() + ">";
}

return result + "]";

} else {
return "";
}

}

}
==========================================
LoginAction-conversion.properties

key_user=com.cai.map.User
Element_user=com.cai.map.User
==========================================
xwork-conversion.properties
com.cai.map.User=com.cai.map.UserConverter
===========================================
struts。xml
<package name="s" extends="struts-default">
<action name="map"
class="com.cai.map.LoginAction">

<result name="success">/mapwelcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
=========================================
login。jsp
<s:form action="map">
<s:textfield name="user" label="用户"></s:textfield>
<s:submit value="登陆"></s:submit>
</s:form>
=======================================
mapwelcome.jsp
<s:property value="user[0].name"/><br>
<s:property value="user[0].pass"/>
====================================
以上这些配置我的工程。但是总是报错。找不出高手指点。
报错如下:
java.lang.ClassCastException: com.cai.map.User
Caused by: java.lang.NullPointerException
at com.cai.map.LoginAction.execute(LoginAction.java:37)


...全文
179 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
云飞_ 2008-09-21
  • 打赏
  • 举报
回复
恩。list的例子做过。我也是看的一本struts2的 书,照着做的。但是,关于map的例子。很少。去网上搜多数是关于list的
richard_2010 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lemon520 的回复:]

Map不支持索引的get(n)方法,所以你的getUser().get(0)其实是一个null,因为没有0为key的user


         
[/Quote]

建议改成list,如何取值可以查查jdk文档,效果比别人直接告诉你答案好多了。
云飞_ 2008-09-19
  • 打赏
  • 举报
回复
List 是这样封装的,怎样才能获取值呢?
xiaoxinkuaile100 2008-09-19
  • 打赏
  • 举报
回复
怎么不用db那?
luhao 2008-09-19
  • 打赏
  • 举报
回复
另外 zidasine 说的也正确
MAP 是 KEY-VALUE对应的
不是list
luhao 2008-09-19
  • 打赏
  • 举报
回复
空指针错

<s:textfield name="user" label="用户"></s:textfield>
这里传给ACTION的是一个String

而你接收的时候却是 private Map user;
zidasine 2008-09-19
  • 打赏
  • 举报
回复
((User)getUser().get(0)).getName()
以Integer 0 为key的user 不存在((User)getUser().get(0)) 这部分为null
再getName()就是java.lang.NullPointerException
lemon520 2008-09-19
  • 打赏
  • 举报
回复

Map不支持索引的get(n)方法,所以你的getUser().get(0)其实是一个null,因为没有0为key的user


huangyangweiyue 2008-09-19
  • 打赏
  • 举报
回复
路过,帮顶下,没用过struts2

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧