0

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

<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 以进行进一步处理。

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

4

2 回答 2

1

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

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

为了实现这一点,我开始思考是否可以在我的主表单中嵌套一个表单,它会解决我的问题。但我发现不允许嵌套表格。所以我想到的下一个选项是如何在用户不点击提交按钮的情况下提交相同的表单,并将其作为“不完整”提交进行适当处理(从某种意义上说,表单仍需由用户手动提交)通过单击服务器上的提交按钮)。

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

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

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

当用户最终单击表单上的提交按钮以提交最终完成的表单时,将调用另一个 javascript 函数,该函数只需将表单上隐藏字段的值设置为字符串“最终提交”并提交表单作为 :-

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.
  }
}
于 2013-03-02T10:53:11.207 回答
0

由于您还没有提供代码selectProduct(this.value) ,我假设它会在您更改下拉列表中的值时提交 jsp 页面。

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

request.setAttribute("valuetodisplay" ,valuetodisplay);

现在在jsp中

<input type="text" value ='<%= request.getAttribute("valuetodisplay")%>' />
于 2013-02-16T18:08:33.130 回答