我正在尝试将表单提交给servlet(java)。表单有一堆问题,每个问题有4个单选按钮,用户选择其中一个。我不知道表格中的问题数量。它可能是10,15,12 ......取决于其他一些标准。我的问题是,检索用户为表单上的问题所做的选择列表的最佳方法是什么。
答案 0 :(得分:2)
您可以使用HttpServletRequest.getParameterNames()来检索请求中所有表单元素的名称枚举。然后,您可以使用HttpServletRequest.getParameter(name)迭代枚举并为每个元素请求单个值。
如果您的HTML包含除选项单选按钮以外的其他FORM元素,请使用这些单选按钮的聪明命名约定,以便在枚举参数名称时,您知道要请求的内容。
一个例子。
如果您的表单包含以下选项的两个问题:
Question 1:
<input type="radio" name="question1" value="option1">
<input type="radio" name="question1" value="option2">
<input type="radio" name="question1" value="option3">
Question 2:
<input type="radio" name="question2" value="option1">
<input type="radio" name="question2" value="option2">
<input type="radio" name="question2" value="option3">
在您的servlet中,
Enumeration e = request.getParameterValues();
while(e.hasMoreElements()){
String name = (String)e.nextElement();
if(name.startsWith("question"){
String value = request.getParameter(name);
//your logic here
}
}
另一个做同样的事情是:
在您的servlet中,
int maxQuestionNumber = Integer.parseInt(request.getParameter(“maxQuestionNumber”)); //这应该是HTML表单中隐藏的变量,代表表单中的最大问题。
for(int i=1;i<=maxQuestionNumber;i++){
String value = request.getParameter("question"+i);
//your logic here..
}
答案 1 :(得分:1)
我想到的一个快速技巧是将所有字段命名为
"question_"+n
并且隐藏了值为n的输入类型。如果表单有办法知道要呈现多少问题,它应该有办法设置n的值。
稍后您只需检索该值并...
n = new Integer( request.getParameter("number_of_question"));
for( int i = 0 ; i < n ; i++ ) {
list.add( request.getParameter("question_"+i));
}
这是我想到的第一件事
答案 2 :(得分:1)
我建议没有解决方法。 ServletRequest.getParameterMap()在这个场景中会派上用场。映射的键的类型为String,值的类型为String []。
因此,您可以使用类似这样的foreach循环轻松遍历地图,
for(Map.Entry<K, V> entry : map.entrySet()){
..
if(entry.getValue().length > 1){
//means the choices not the question
}else{
//means the question not the choices
}
}
我希望它会有所帮助。
答案 3 :(得分:0)
一种典型的技术是使用公共前缀命名字段,然后遍历它们:q000,q001,q002等,直到找到不存在的字段。
答案 4 :(得分:0)
您可以使用JSON,因此将字符串传递给servlet,如果您使用POST,它可以处理非常长的字符串。这样你就可以传递你想要的任何东西,即使参数很复杂。