使用OGNL表达式类型转换时,struts是自动转换的。但是集合类型需要配置。
一、User类
一个普通一般的类
package com.meetcomet.entity; public class User { private String username; private String password; private String email; 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; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
二、UserListAction
public class UserListAction extends ActionSupport{ private List<User> users;
public String execute() throws Exception { users = new ArrayList(); User u1= new User(); u1.setUsername("张三"); u1.setPassword("123456"); u1.setEmail("zhangshan@qq.com"); .....(添加了4个user).... return SUCCESS; } public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } }
三、配置文件
UserListAction-conversion.properties
Element_users=com.meetcomet.entity.User
注意为固定写法,users为UserListAction中的成员变量。
四、jsp文件
1.输入
<s:form action="/user/userlist"> <s:iterator value="new int[4]" status="st"> <tr> <td> <s:textfield name="users[%{#st.index}].username" label="用户名"/> </td> <td> <s:password name="users[%{#st.index}].password" label="密码"/> </td> <td> <s:textfield name="users[%{#st.index}].email" label="email"/> </td> </tr> </s:iterator> <s:submit value="提交 "/> </s:form>
2.显示
<table> <th> <td>用户名</td><td>密码</td><td>email</td> </th> <s:iterator value="users" status="st"> <tr> <td><s:property value="username"/></td> <td><s:property value="password"/></td> <td><s:property value="email"/></td> </tr> </s:iterator> <tr> </tr> </table>
运行后会显示用户列表。
------------------------------------
关于SET集合,我按照通常的做会产生如下的错误
Error setting expression 'users.makeNew[0].username' with value '[Ljava.lang.String;@5ab5b91'
ognl.OgnlException: Error getting property descriptor: null
at com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor.getProperty法
根据http://javaligang.blog.51cto.com/5026500/874468的说法,暂时不知道怎么处理好。