怎样从jsp页面传递一个List<Map<String,Object>>的集合到Action

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样从jsp页面传递一个List<Map<String,Object>>的集合到Action相关的知识,希望对你有一定的参考价值。

    第一步在jsp直接使用使用jsp的页面内置对象session或者request对象,调用其方法setAttribute()将这个对象保存起来

    第二步在Action类中,在前置使用的范围域中使用getAttribute()方法获取到这个对象,例如request.getAttribute("存储名");

    将得到的对象request.getAttribute("存储名")进行类型强转

参考技术A   首先,不得不说,这个问题很奇特,其次,我说下我的想法,假设你的这个类型的List名称为list,定义在你的Action中,你如果要传值就在表单中写属性名称,格式为list[list的索引][Map的key],这样应该可以满足你所说的,不妨试下吧!追问

我试了 把一个文本框的那么属性写成list[list的索引][Map的key]
,但是在action中还是得不到list集合

追答

你设置list的getter setter方法了么?

最好声明list的时候这样写:

List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();

追问

list[list的索引][Map的key] 索引和key之间不用加点吗

追答

不用的,就相当于数组形式的那样…

追问

name="list[list的索引][Map的key]" 这样写对吗?

追答

嗯,你试下,可以不,因为我没这样反过来用过,所以不是很确定呢。。

追问

不行

追答 private List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();

public List<Map<String, Object>> getList() 
return list;


public void setList(List<Map<String, Object>> list) 
this.list = list;

如果Action中这样写,并且Jsp中的属性是按list[list的索引][Map的key]这样写的,还是注入不成,那我也没办法了,估计这样是太复杂了,下午我自己试试,先午睡了…

昨天试了一下午,我说的那种方法不行,但是反过来是可以的,查出来的结果是:需要设置struts自定义类型转换器,你可以试着看看…

参考技术B 在jsp页面把List<Map<String,Object>>值作为参数放在action属性里面然后提交
后台就直接在Action里面getparameter
试试追问

怎么样作为参数,请说的准确一点

追答

/DemoServlet?action=demo&list=">
不过感觉挺神奇的,不知道jsp能不能把list传过去哦,还没玩过
为什么不把内容组合一下当成一个字符串传递给后台来处理

参考技术C 建议你把这个集合放到request作用域中携带到Action中,然后再从request作用域中把集合给取出来。追问

具体方法怎么写

追答

视图层用的是什么框架?structs1.x还是structs2.x?

参考技术D 怎么会有这样的需求,你这个List<Map<String,Object>>是怎么在jsp产生的............换个思路,先想下源头,这样的需求不合理

如何将一组复选框值从一个 JSP 页面传递到另一个

【中文标题】如何将一组复选框值从一个 JSP 页面传递到另一个【英文标题】:How to pass an array of checkbox value From one JSP page to another 【发布时间】:2013-08-31 18:44:03 【问题描述】:

我是初学者。我想将一组复选框值从一个 JSP 页面传递到另一个页面。获取数据的页面是

<%
     ResultSet rs=s.notapprovedqns();
 %>
 <%                
     while(rs.next())
      %>
      <tr><td><input name="qns[]" type="checkbox" value="<% out.println(rs.getInt("question_id")); %>" /></td><td><center><%=rs.getString("question_id") %></center></td><td><%=rs.getString("question") %></td></td></tr>
     <% 
        
      %>

如何在 JSP 另一个页面中接收复选框值。我已经尝试了以下代码,但它不能正常工作

String[] h=null;
h=request.getParameterValues("qns[]");

但它传递了价值

[Ljava.lang.String;@a0a595 

请有人帮我解决这个问题。

【问题讨论】:

hString[]。迭代它的元素。你看到的是Object#toString() 【参考方案1】:

您可以按如下方式使用它。 在表格中

<form method="post" action="process.jsp">
    <input type="checkbox" name="list" value="value1">
    <input type="checkbox" name="list" value="value2">
    <input type="checkbox" name="list" value="value3">
</form>

在 process.jsp 中

    String[] ids=request.getParameterValues("list");
    // this will get array of values of all checked checkboxes
    for(String id:ids)
     // do something with id, this is checkbox value
    

【讨论】:

【参考方案2】:

你可以使用 stringbuilder(),我希望它有效:

 ResultSet rs=s.notapprovedqns();
 StringBuilder lstquestion = new StringBuilder();
 while(rs.next()) 
    String question_id = rs.getString("question_id");
    String question = rs.getString("question");
    lstquestion.append('<tr><td><input name="qns[]" type="checkbox" value='+question_id+' /></td><td><center>'+question_id+'</center></td><td>'+question+'</td></td></tr>')

 

【讨论】:

【参考方案3】:
for(int count=0; count<h.length; count++)
    // DO SOME OPERATION on h[count];

另外,只是一个建议,请不要将变量命名为qns[],您可以通过说selectedItems来保持简单

【讨论】:

【参考方案4】:

你得到的是一个数组,所以你需要使用索引来获取元素,比如:

h=request.getParameterValues("qns[]");
String item = h[0]

或者使用循环来迭代整个数组。

【讨论】:

以上是关于怎样从jsp页面传递一个List<Map<String,Object>>的集合到Action的主要内容,如果未能解决你的问题,请参考以下文章

jsp页面中怎样获得list

jsp页面如何对map集合遍历

jsp页面像action中传值问题,需要传递一个map

怎样在jsp页面提取list集合的第一位第二位第三位等等的数据

jsp怎么引用map类

list集合