【发布时间】:2015-07-07 11:53:32
【问题描述】:
我有一个 jsp 页面,其中包含许多 使用 jQuery 填充的选择,即它们具有 <option> 标签,它们只是通过函数获取它。每个选择都有大约 30 个选项。
<form id="target" name="target" action="/project/myservlet" method="get">
<select class="myClass" id="sel1" name="sel1" ></select>
<select class="myClass" id="sel2" name="sel2"></select>
...
</form>
我在我的 servlet 中使用 request.getParameter("sel1") 收到了这些值,但是对于已更改的选择,我得到了 null。例如,假设我从第 2、第 4 和第 5 个选择中选择值,然后这些选择在 servlet 中获取空值。其他人获得第 0 个值(默认且未更改) - 这没关系。
This 可以帮助解释我的问题。当我修改选择时,我在下一页中得到空值。
据此,如果我在选择中使用onload,它有助于将更新后的值带到下一页进行单选。但问题是我在页面上不仅有一个选择。我希望更新的值在没有页面刷新/进入另一个页面的情况下进入下一页,除非单击提交。我认为更改发生时请求没有得到更新?甚至“get”中的 url 也没有得到改变的选择。
没有这样的错误,只是如果选择未修改(默认值),我会得到值。它将默认值发送到下一页。当我从下拉列表中选择另一个选项时,除非我使用 onchange 提交表单,否则我会在 servlet 上得到 null。但这对我不起作用,因为我有很多选择。我无法在每次选择更改时继续提交表单并转到下一页。
编辑: 如果有帮助,这是我的 jQuery 代码:
$(document).ready(function() {
$('select').change(function(){
var v = $(this).val();
$('select option[value="'+$(this).data('old-val')+'"]').prop('disabled', false);
$(this).data('old-val',v);
if(v != "0"){
$('select option[value="'+v+'"]').not(this).prop('disabled',true);
}
});
$('select').each(function(idx,select){
var stateArray = ["Preference No. "+(idx+1),"Bill", "Sally", "Alice"];
$.each(stateArray, function(iIdx, iItem){
$(select).append('<option value="'+iIdx+'">'+iItem+'</option>');
});
});
$( "#target" ).submit(function( event ) {
alert( "Handler for .submit() called." );
});
});
编辑 2:Servlet: 公共类首选项扩展 HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
try {
PrintWriter out = response.getWriter();
String sel = request.getParameter("sel1");
}catch(Exception e){ }
}
}
【问题讨论】:
-
你能把你的问题说得更清楚吗?
-
您是使用ajax请求发送数据还是表单提交,您能详细说明一下您是如何发送数据的吗??
-
@SpringLearner:现在试试看。
-
你没有选项标签,所以不会有任何下拉菜单
-
我有。选择是使用 jQuery 填充的。每个选择都有 30 个选项,所以我使用一个函数填充它们。