【问题标题】:How to keep selected value in dropdown box after form submission? [duplicate]表单提交后如何在下拉框中保留选定的值? [复制]
【发布时间】:2014-12-12 16:01:07
【问题描述】:

在我找到的众多解决方案中,我似乎无法让其中任何一个为我工作。我的 jsp 文件中有一个下拉列表:

    <select name="chosenOne" onchange="javascript:getUsers(this.value);">  
            <option value="0" onclick="javascript:getUsers(this.value);">All Modules</option>
            <c:forEach items="${modules}" var="module"> 
                <option value="${module.id}"><c:out value="${module.title}"/></option>  
            </c:forEach>  
        </select></p> 

它从我的数据库中动态填充,“所有模块”选项除外。这是我的 onchange 事件的 javascript 函数:

       <script type="text/javascript">
        function getUsers(id) { 
            if (id != "0"){
            document.updateForm.id.value = id;
            }
            else{
            document.updateForm.id.value = "0";
            }
            document.updateForm.submit(); 
        }</script>

这是我处理下拉框的 servlet 代码:

        protected void process(final HttpServletRequest request, final HttpServletResponse response)
        throws ServletException, IOException {

    long modID = 0;
    String url = "jsp/user/administration.jsp";
    request.setAttribute("modules", dataAccessor.getAllModules());

    if (isParameterValid(request.getParameter("id"))) {
        modID = Long.parseLong(request.getParameter("id"));
        request.setAttribute("users", getUsersFromModule(modID));
        System.out.println(modID);

    } else if (!isParameterValid(request.getParameter("id"))) {
        request.setAttribute("users", dataAccessor.getAllUsers());

    } else {
        request.setAttribute("errorMessage", "There was a problem retrieving users!");
        url = "jsp/error.jsp";
    }

    //request.setAttribute("formerSelect", modID);
    request.getRequestDispatcher(url).forward(request, response);
}

那么如何在表单刷新后让选定的下拉值保留在下拉框中?我一直在设置一个属性“formerSelect”,它只包含下拉列表中先前选择的项目的值。但是由于某种原因,当我试图将它分配给我的选项标签中的“选定”值时,它使我的下拉菜单变得无用。任何帮助深表感谢。

【问题讨论】:

    标签: java javascript html jsp drop-down-menu


    【解决方案1】:

    提交后需要将此参数传递给httpRequest:

    request.setAttribute("selectedModule", request.getParameter("chosenOne"));
    

    然后你需要将一个选项标记为选中:

    <c:forEach items="${modules}" var="module"> 
         <option value="${module.id}" ${module.id == selectedModule ? 'selected':''}>...</option>  
    </c:forEach> 
    

    【讨论】:

    【解决方案2】:

    我可以这样解释。作为示例代码 将此代码放入您的 Servlet 中

    String status = request.getParameter("status");
    request.setAttribute("status", status);
    

    把这段代码放到jsp文件中

    <select  id="status" name="status" class="listBx"  onChange = "check(this);">
        <option value="" >--- Select ---</option>                           
        <option value="1"  <%if((request.getAttribute("status") != null) && request.getAttribute("status").equals("1")){ %> selected <%} %>>Logged in</option>
        <option value="0"  <%if((request.getAttribute("status") != null) && request.getAttribute("status").equals("0")){ %> selected <%} %>>Logged Out</option>
    </select>
    

    【讨论】:

    • 这比顶级解决方案好很多
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多