将参数从javascript传递给servlet

时间:2011-05-18 05:58:15

标签: java javascript html servlets

我正在从gmail和yahoo检索用户的所有联系人,我添加了复选框,用户需要选择他需要发送电子邮件的所需电子邮件ID。我需要收集所有用户选择的电子邮件ID并将其保存在一个字符串中,将该字符串发送到我发送电子邮件的另一个servlet。

我能够动态添加复选框,但我无法收集电子邮件并将其保存在字符串中。这是我在所有电子邮件之前添加复选框的代码, 请帮助我将选定的电子邮件ID放在字符串中

我使用了以下代码,但我仍然无法执行此操作。您可以查看此应用的演示http://ec2-50-16-183-101.compute-1.amazonaws.com/SocialAuthNew/ 要从Gmail中获取联系人,请在文本框中输入google,然后输入yahoo类型的yahoo,然后单击“提交”按钮

 List<Contact> contactsList = provider.getContactList();
                    PrintWriter out = response.getWriter();  
                    out.println("<html>");
                    out.println("<head><script type='text/javascript'>");
                    out.println("function getAllContacts(size){ var selected_list='';");
                    out.println("for(var c=0;c<size;c++){if(document.getElementById('mailCheckbox'+c).checked==true){selected_list=selected_list+document.getElementById('lblmail'+c).innerHTML+':';}}");
                    out.println("document.getElementById('final_mailing_list').innerHTML=selected_list;}</script>");
                    out.println("<title></title>");
                    out.println("</head>");
                    out.println("<body>");

                    for(int i=0;i<contactsList.size();i++){
                        System.out.println(contactsList.get(i).getFirstName()+" : "+contactsList.get(i).getLastName()+":"+contactsList.get(i).getEmail());

                        out.println("<h1> Imported conatcts from your mail are:-</h1>");
                        out.println("<input type='checkbox' id='mailCheckBox"+i+"' name='mailCheckbox'></input>");
                      /*  out.println(contactsList.get(i).getFirstName());
                        out.println(contactsList.get(i).getLastName());*/
                        out.println("<label id='lblmail"+i+"'>"+contactsList.get(i).getEmail()+"</label>");
                    }
                    int size=contactsList.size();
                    out.println("<input type='button' value='GetContact' onclick='getAllContacts("+size+");'/> ");
                    out.println("<div id='final_mailing_list'></div></body>");
                    out.println("</html>");
                }

3 个答案:

答案 0 :(得分:3)

试试这个:

1)将您的电子邮件包装在DOM元素中以便于访问

out.println("<span>" + contactsList.get(i).getEmail() + "</span>");

2)使用例如JQuery用于规范化对客户端DOM的访问,执行

function getSelectedEmails() {
  var emails = [];
  $('body').find('input[name="mailCheckbox"]:checked').each(function() {
    emails.push($(this).closest('span').text());
  });
  return emails;
}

这将返回数组中的电子邮件 - 如果您愿意,可以轻松地将其连接成一个字符串。

var emailString = emails.join(", ");

...虽然我认为使用数组通常更好(如果你需要序列化它可能是JSON编码的。)

答案 1 :(得分:1)

实现这一目标的一种更原始​​的方法,

正如您现在所做的那样创建一堆Check-Box,但区别在于所有的htem应该具有相同的名称,即在代码中进行以下更正

out.println("<input type='checkbox' id='mailCheckBox' name='mailCheckbox'></input>");

现在使用以下对请求对象的调用

检索服务器端此类文本框的所有值
            String[] emailIds = request.getParameterValues("mailCheckBox");

希望这有帮助。

答案 2 :(得分:1)

使用数组要容易得多。我使用了数组,并将复选框名称作为check1,并在单击提交按钮时调用了以下函数。此函数会警告所选复选框的值,并将操作传递给servlet

<script>
function onCallForInterview()
{
var selectedIds;
var count=0;
for (i=0; i<document.frm.check1.length; i++)
{
if (document.frm.check1[i].checked==true)
{
if(count==0){
selectedIds=document.frm.check1[i].value; 
count=count+1; 
}
else
selectedIds=selectedIds+","+document.frm.check1[i].value;
}
}
alert(selectedIds);  
document.frm.action="<%=contextPath%>/SearchCandInfo?    action=selectcanforinterview&ids="+selectedIds;
document.frm.submit();
}
</script>