【问题标题】:Changed select on jsp get null value in servlet更改了 jsp 上的选择在 servlet 中获取空值
【发布时间】: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 个选项,所以我使用一个函数填充它们。

标签: java jquery jsp


【解决方案1】:

您需要将&lt;option&gt; 标签添加到您的&lt;select&gt; 标签中。

每个&lt;option&gt; 必须具有value 属性,如下所示:

&lt;option value="3"&gt;Apple&lt;/option&gt;

来自所选选项的value 属性的值将是您的&lt;select&gt; 的值。您将像往常一样通过name 在服务器端获取它。

【讨论】:

  • 使用 jQuery 填充选项。它在&lt;script&gt;...&lt;/script&gt; 中是一个单独的函数。所有的选择都有选项。每个大约 30 个。
  • 所以,你需要提供完整的代码。控制台有错误吗?
  • 如果选择未修改,我将获取值。它将默认值发送到下一页。当我从下拉列表中选择另一个选项时,我在 servlet 上得到 null
  • 很难确定发生错误的确切时刻。因此,请在浏览器中从开发者工具中复制生成的 html 并在浏览器控制台中检查错误。
  • 我可能只是想念如何在下一页上获取更新选择的值。它将未更改的值带到 servlet 就好了。
【解决方案2】:

我的 jQuery 中的所有选择元素都禁用了所选选项。我不得不稍微修改一下 jQuery。禁用的元素不会在表单中结转。在修改 jQuery 以不禁用选项时,问题已解决。不得不采取一些帮助来识别和纠正这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-08
    • 2014-03-07
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多