Java 通过下拉菜单更改搜索框正在搜索的内容

Java 通过下拉菜单更改搜索框正在搜索的内容,java,forms,jsp,select,Java,Forms,Jsp,Select,我目前在我们的管理导航中有一个“搜索框”,它正在提交到searchOrdersAction.jsp页面 <tr align="left" valign="top"> <td>&nbsp;</td> <form action="searchOrdersAction.jsp" name="form" method="get" ><td><input name="CustEmail

我目前在我们的管理导航中有一个“搜索框”,它正在提交到searchOrdersAction.jsp页面

<tr align="left" valign="top">
            <td>&nbsp;</td>
            <form action="searchOrdersAction.jsp" name="form" method="get" ><td><input name="CustEmail" type="text" class="DataEntry" id="CustEmail"></td><td><input name="Submit" type="submit" class="SOBut" value="Go"></td></form>
         </tr>

到目前为止,搜索框仅允许通过客户电子邮件进行搜索。我想知道是否有可能包括一个下拉列表,它将有两个选项,这将改变正在搜索的内容?我可以通过将输入的id从“CustEmail”更改为“OrderID”来实际更改搜索


注意:我只能使用一个搜索框。甚至可以更改吗?

我假设您自己不能更改搜索jsp,只能更改它的管理界面。在这种情况下,这应该是可行的:

<tr align="left" valign="top">
  <td>&nbsp;</td>
  <form action="searchOrdersAction.jsp" name="form" method="get">
    <td><input name="CustEmail" type="text" class="DataEntry" id="frm_input"></td>
    <td><select onchange="document.getElementById('frm_input').name=this.value">
          <option selected value="CustEmail">Customer Email</option>
          <option value="OrderID">Order ID</option>
        </select>
    </td>
    <td><input name="Submit" type="submit" class="SOBut" value="Go"></td>
  </form>
</tr>

客户电子邮件
订单号

未经测试,但非常简单。

当然你可以做到。您必须只使用javascript

你必须做的是:

将属性“onSubmit”添加到表单标记中

<form action="searchOrdersAction.jsp" {...} onSubmit="return changeMe()">
编写一个javascript函数,从selectbox读取值或选项文本,并更改属性ID和名称

function changeMe()
{
 var selectValue = document.getElementByID("theSelectBox").value; 
 var myInputField = document.getElementByID(selectValue);

 return true;
}
希望这会有所帮助


PS:如果您可以使用jquery,那么您所需要的代码会更小、更简单。

您可以通过订阅选择框的onchange事件使用javascript来实现这一点

添加下拉列表以在搜索类型之间切换

<select id='search_field_selector'>
    <option value='CustEmail'>Email</option>
    <option value='OrderID'>Order ID</option>
</select>

只需添加一个下拉列表,让表单提交到servlet


订单号
客户电子邮件
在servlet中,根据输入执行搜索作业

String type=request.getParameter(“type”);
字符串查询=request.getParameter(“查询”);
列表结果=空;
如果(“顺序”。等于(类型)){
结果=orderService.find(查询);
}else if(“email”.equals(type)){
结果=emailService.find(查询);
}
setAttribute(“结果”,results);
request.getRequestDispatcher(“/WEB-INF/search.jsp”).forward(请求,响应);
/WEB-INF/search.jsp
中,您可以按常规方式显示结果


不需要JavaScript,如果用户禁用了JS(例如移动浏览器),JavaScript将无法工作。

您只需让用户指定两个字段作为搜索条件即可。如果指定了这两个字段,则将进行“和”搜索。否则就是“或”搜索。谢谢丹尼尔·马丁,我真的很感谢你的帮助。是否可以更改“Id”,而不是“名称”。我确实尝试将.name=this.value更改为.id=this.value(但似乎不起作用)。您确实不想更改id值。以前,当您说“我可以通过将输入的id从“CustEmail”更改为“OrderID”来实际更改搜索…”。。。我相信你错了。改变的关键不是
id
,而是
name
。搜索表单不知道您使用的
id
是什么,但知道您使用的
name
是什么。因为我在这里发布答案时遇到了很大困难,最后两行缺失:myInputField.setAttribute(“name”,selectValue);setAttribute(“id”,selectValue);
<select id='search_field_selector'>
    <option value='CustEmail'>Email</option>
    <option value='OrderID'>Order ID</option>
</select>
//bind the on change event to the select box
document.getElementById('search_field_selector').addEventListener('change',
    switchSearchType,false);

//Switch the ID of the input when the select box changes
function switchSearchType(e){
    var target = document.getElementById('CustEmail');
    if(!target){
        target = document.getElementById('OrderID');
    }
    target.setAttribute('id',this.value);
}