想在 Jsp 页面通过 struts2 标签来显示 map 中的键值,说真的以前开发封装数据都是用 List ,从来没有用过 Map 来封装数据,最多是用来保存用户登录信息,以方便用来判断用户是否以登录, 但用 Map 来封装数据实在不是明智之举, 但我以前也从没这样子作过,所以在网上找了好久也没找到相关的信息, 后来一想struts2 可以直接用来显示action 中的属性值,所以就想出了以下方式解决了这个问题,具体代码如下: action
public String execute() throws Exception ...{
if(this.getUserName().equals("chen") && this.getPwd().equals("chen")) ...{
ActionContext.getContext().getSession().put("userName", this.getUserName());
User user = new User();
user.setName("a");
user.setCode("A");
map.put(1, user);
user = new User();
user.setName("b");
user.setCode("B");
map.put(2, user);
return SUCCESS;
}
return ERROR;
}以下是 jsp <%@taglib uri="/struts-tags" prefix="s"%>
<table>
//Map的keySet()方法获取所有的key值
<s:iterator value="map.keySet()" id="id">
<tr><td>
<s:property value="#id"/></td>
<s:iterator value="map.get(#id)">
<td><s:property value="name"/></td>
<td><s:property value="code"/></td>
</s:iterator>
</tr>
</s:iterator>
</table>
Struts2中继承了Webwork的强大OGNL,下面是一个例子:
index.jsp:提交列表
<s:form action="ognl">
<s:textfield name="list[0]" label="list[0]="/>
<s:textfield name="list[1]" label="list[1]="/>
<s:textfield name="list[2]" label="list[2]="/>
<s:textfield name="map['name']" label="map['name']="/>
<s:textfield name="map['pass']" label="map['pass']="/>
<s:submit></s:submit>
</s:form>
其中list[0],list[1],list[2]对应被添加到Action的list中!
Action:
package actions;
import com.opensymphony.xwork2.ActionSupport;
import java.util.*;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
public class OGNLValue extends ActionSupport implements ServletRequestAware
{
List list;
Map<String,String> map;
String var;
ServletRequest req=null;
public void setVar(String v)
{
var = v;
}
public String getVar()
{
return var;
}
public void setList(List l)
{
list = l;
}
public List getList()
{
return list;
}
public void setMap(Map m)
{
map = m;
}
public Map getMap()
{
return map;
}
public String execute()
{
req.setAttribute("list", list);
req.setAttribute("map", map);
return "OK";
}
public void setServletRequest(HttpServletRequest arg0)
{
req = arg0;
}
}
show.jsp
<s:property value="#request.list[0]"/>
<s:property value="#request.map['name']"/>
struts.xml
<action name="ognl" class="actions.OGNLValue">
<result name="OK">/show.jsp</result>
<result name="ERROR">/jsp/error.jsp</result>
</action>