当组合框值更改时,动态更新数据库中的文本框值

时间:2013-02-16 04:17:09

标签: java javascript jsp servlets

情况如下。我有一个下拉菜单。通过从数据库中获取一些值来填充选项sin下拉菜单。要做到这一点是我所做的..: -

<select name="product_list" onchange="selectProduct(this.value)">
    <option value="none">Select one</option>
        <%
            List<String> options = new ArrayList<String>();
            DynamicCombo comboBox = new DynamicCombo();
            options = comboBox.generateComboBox();
            Collections.sort(options);
            int tempVar = 0;
            while (tempVar < options.size()) {
                out.print("<option value=\"");
                out.print(options.get(tempVar));
                out.print("\">");
                out.print(options.get(tempVar));
                out.print("</option>");
                tempVar++;
            }
        %>
</select>

DynamicCombo是一个具有名为'generateComboBox()'的方法的类。此方法只返回一个数组列表,其中包含从数据库中提取的所有值,这是我需要在前端(jsp页面)的下拉框中显示的内容。在我的jsp页面上,我只需遍历此列表并将其作为选项进行适当打印。 这绝对没问题。

现在我的表单上有另一个文本框,比如'textbox1'。现在要求是应该根据用户从上面的下拉框中选择的内容来更新此文本框值。

因此,例如,如果用户从下拉框中选择“prod1”(后端数据库表中的主键)选项,则应从数据库表中提取相应的值(产品名称),并且应该在名为“textbox1”的文本框中更新。

另一件事是整个事情都包含在一个应该最终提交给servlet进行进一步处理的表单中。

那么我怎样才能做到这一点。

2 个答案:

答案 0 :(得分:1)

我找到了解决自己问题的方法。它可能不是最优雅的方式,但它做得很好。

根据我的要求,我真正想要做的是......根据用户从下拉框中选择的内容,将值(将从数据库中提取)插入到表单上的文本框中已存在于我的表格中。

为了达到这个目的,我开始思考,如果我可以用我的主要形式嵌套表格,它就能解决我的问题。但我发现不允许嵌套表格。因此,我想到的下一个选项是一些如何在没有用户点击提交按钮的情况下提交相同的表单,并且还将其作为“不完整”提交进行适当处理(在某种意义上表单仍然由用户手动提交)通过单击服务器上的“提交”按钮。

所以我只是使用下拉框中的'onChange'事件。我在我的表单上创建了一个额外的隐藏字段。我写了一个简单的javascript函数,它只是将隐藏字段的值设置为字符串 - “部分提交”,并将我的主表单(比如名为'form1')提交为: -

document.getElementById("hidden_id").setAttribute("value","partial submit");
form1.submit;

每当(以及每次)下拉框的onchange事件被触发时,都会调用执行上述操作的函数。

当用户最终点击表单上的提交按钮提交最终完成的表单时,会调用另一个javascript函数,它只是将表单上隐藏字段的值设置为字符串“final submit”,并且提交表格为: -

document.getElementById("hidden_id").setAttribute("value","final submit");
form1.submit;

现在在我的服务器上,我检查了这个隐藏字段的值: -

if(request.getParameter("hidden_id").equals("partial Submit"))
{
  // make a database connection, pass the value user selected from the drop down box
  // to a prepared statement that does the query for getting the 'productName' from 
  // the database, collect the returned string in a variable and set a 
  // request attribute with this returned value. This value can simply be used in the 
  // jsp to fill in the value part of the textbox1.
}
else
{
  if(request.getParameter("hidden_id").equals("final Submit"))
  {
   // do the rest of the final processing that needs to be done when user finally   
   // submits the completed form.
  }
  else
  {
     // throw an exception to take care of the possibility that the user might send 
     // in a 3rd value as a value for the hidden field.
  }
}

答案 1 :(得分:0)

由于您还没有提供selectProduct(this.value)的代码,我认为它提交了jsp页面,就像您在下拉列表中更改值一样。

如果是servelt中的情况,请设置要在请求对象中的jsp中显示的值

request.setAttribute("valuetodisplay" ,valuetodisplay);

现在在jsp

<input type="text" value ='<%= request.getAttribute("valuetodisplay")%>' />