【问题标题】:passing parameter from javascript to servlet将参数从 javascript 传递给 servlet
【发布时间】:2011-05-18 05:58:14
【问题描述】:

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

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

我用了下面的代码,还是不行。你可以看看这个应用的demohttp://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>");
                }

【问题讨论】:

  • HTML 属于 JSP,而不属于 servlet。它会让你的生活(和 JavaScript 的东西)很多更轻松。

标签: java javascript html servlets


【解决方案1】:

试试这个:

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 编码)。

【讨论】:

  • 您好,我对代码进行了一些更改。我已经在这里发布了,请看一下,请帮助我。
【解决方案2】:

s 使用数组要容易得多。我使用了数组并将复选框名称指定为 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>

【讨论】:

  • 感谢您的帮助,我尝试了您建议的逻辑,我想我做错了什么。我无法获得所需的输出。请看一看。
  • 只要调用这个函数 onclick='getAllContacts()';在函数中,你应该取复选框的长度,即 mailcheckbox.length() 试试这个,我在我的 prog 中使用了数组,它工作正常,但你使用 for 循环,所以检查上面的建议是否对你有帮助。
  • 在这一行添加类似这样的内容 value="contactsList.get(i).getEmail() " 这样动态创建的每个复选框都将具有唯一值
【解决方案3】:

一种更原始​​的方式来实现这一点,

像现在一样创建一堆复选框,但不同之处在于所有 htem 都应该具有相同的名称,即在代码中进行以下更正

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

现在使用请求对象的以下调用检索服务器端此类文本框的所有值,

            String[] emailIds = request.getParameterValues("mailCheckBox");

希望这会有所帮助。

【讨论】:

  • 具有相同 ID 的多个 DOM 元素是无效的 HTML。
  • @Jeevan:您无需对 html 生成代码进行任何更改。就用它吧。我的方法只需要相同的参数名称。 ID 可能不同。
猜你喜欢
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2015-01-06
  • 2014-05-25
  • 1970-01-01
  • 2012-09-24
相关资源
最近更新 更多