- Struts 2.x权威指南
- 李刚编著
- 395字
- 2025-03-11 03:21:11
4.3.1 使用OGNL转换成Map集合
请看下面的Action类片段。
程序清单:codes\04\4.3\ognlToObjectMap\WEB-INF\src\org\crazyit\struts2\action\LoginAction.java
public class LoginAction implements Action { // 封装请求参数的Map对象 private Map<String ,User> users; private String tip; // users属性的setter和getter方法 public void setUsers(Map<String ,User> users) { this.users = users; } public Map<String ,User> getUsers() { return this.users; } // 省略tip的setter和getter方法 ... // 处理用户请求的execute方法 public String execute() throws Exception { if (getUsers().get("one").getName().equals("crazyit") && getUsers().get("one").getPass().equals("leegang")) { setTip("登录成功"); return SUCCESS; } else { setTip("登录失败"); return ERROR; } } }
该Action对应的JSP输入页面的表单定义代码如下。
程序清单:codes\04\4.3\ognlToObjectMap\WEB-INF\content\loginForm.jsp
<form action="login.action" method="post"> <table align="center" width="360"> <caption><h3>直接封装成对象Map</h3></caption> <tr> <td>第一个用户名:<input type="text" name="users['one'].name"/></td> </tr> <tr> <td>第一个密码:<input type="text" name="users['one'].pass"/></td> </tr> <tr> <td>第二个用户名:<input type="text" name="users['two'].name"/></td> </tr> <tr> <td>第二个密码:<input type="text" name="users['two'].pass"/></td> </tr> <tr align="center"> <td><input type="submit" value="转换"/> <input type="reset" value="重填" /></td> </tr> </table> </form>
上面的粗体字代码示范了如何利用OGNL表达式来定义表单域的name属性:将表单域的name属性设置为“Action属性名['key值'].属性名”的形式,其中“Action属性名”是Action类里包含的Map类型属性,后一个属性名则是Map对象里复合类型对象的属性名。通过这种方式,Struts 2可以将HTTP请求参数转换成Map属性。
类似地,如果我们需要访问Action的Map类型属性,也可以使用OGNL表达式,如下面代码片段所示。
程序清单:codes\04\4.3\ognlToObjectMap\WEB-INF\content\welcome.jsp
key为one的用户名为:<s:property value="users['one'].name"/><br /> key为one的密码为:<s:property value="users['one'].pass"/><br /> key为two的用户名为:<s:property value="users['two'].name"/><br /> key为two的密码为:<s:property value="users['two'].pass"/><br />