【问题标题】:Selected value for JSP drop down using JSTL使用 JSTL 为 JSP 下拉选择的值
【发布时间】:2013-03-17 10:43:00
【问题描述】:

我在 Servlet 中有 SortedMap 来填充 JSP 中的下拉值,并且我有以下代码

    SortedMap<String, String> dept = findDepartment();
    request.setAttribute("dept ", dept);

在 JSP 中

       <select name="department">
          <c:forEach var="item" items="${dept}">
            <option value="${item.key}">${item.value}</option>
          </c:forEach>
        </select>

我正在使用一个 JSP 页面进行插入和更新。当我在编辑页面时,如何将所选值设置为下拉所选值将来自数据库的位置。

【问题讨论】:

    标签: jsp drop-down-menu jstl retain


    【解决方案1】:

    以下是使用 jstl 标签的简单下拉示例

     <form:select path="cityFrom">  
        <form:option value="Ghaziabad" label="Ghaziabad"/>  
        <form:option value="Modinagar" label="Modinagar"/>  
        <form:option value="Meerut" label="Meerut"/>  
        <form:option value="Amristar" label="Amristar"/>  
     </form:select>
    

    【讨论】:

      【解决方案2】:

      也许我不完全理解接受的答案,所以它对我不起作用。

      我所做的只是检查变量是否为空,将其分配给我数据库中的已知值。这似乎类似于接受的答案,即您首先声明一个已知值并将其设置为选中

      <select name="department">
          <c:forEach var="item" items="${dept}">
              <option value="${item.key}">${item.value}</option>
          </c:forEach>
      </select>
      

      因为没有选择任何选项,因此 item = null

      <%
          if(item == null){
              item = "selectedDept"; //known value from your database
          }
      %>
      

      这样,如果用户随后选择了另一个选项,我的 IF 子句 将不会捕获它并分配给在开始时声明的固定值。我的概念在这里可能是错误的,但它对我有用

      【讨论】:

        【解决方案3】:

        你可以试试更简单的一个:

        <option value="1" ${item.quantity == 1 ? "selected" : ""}>1</option>
        

        【讨论】:

          【解决方案4】:

          我尝试了 Sandeep Kumar 的最后一个答案,我发现方法更简单:

          <option value="1" <c:if test="${item.key == 1}"> selected </c:if>>
          

          【讨论】:

            【解决方案5】:

            在 HTML 中,所选选项由 selected 元素上的 selected 属性表示,如下所示:

            <option ... selected>...</option>
            

            或者如果你是 HTML/XHTML 严格的:

            <option ... selected="selected">...</option>
            

            因此,您只需要让 JSP/EL 有条件地打印它。前提是您已按以下方式准备所选部门:

            request.setAttribute("selectedDept", selectedDept);
            

            那么应该这样做:

            <select name="department">
                <c:forEach var="item" items="${dept}">
                    <option value="${item.key}" ${item.key == selectedDept ? 'selected="selected"' : ''}>${item.value}</option>
                </c:forEach>
            </select>
            

            另见:

            【讨论】:

            • BalusC request.setAttribute("selectedDept", selectedDept); 我想selectedDept 是我的部门数据库值,对吧?
            • 那我应该有两个请求request.setAttribute("dept ", dept);request.setAttribute("selectedDept", selectedDept);
            • 嗯,是的。您在尝试时遇到问题了吗?
            【解决方案6】:

            我尝试了接受的答案,但没有用。

            但是,简单的方法如下:-

            <option value="1" <c:if test="${item.quantity == 1}"> <c:out value= "selected=selected"/</c:if>>1</option>
            <option value="2" <c:if test="${item.quantity == 2}"> <c:out value= "selected=selected"/</c:if>>2</option>
            <option value="3" <c:if test="${item.quantity == 3}"> <c:out value= "selected=selected"/</c:if>>3</option>
            

            享受!!

            【讨论】:

              【解决方案7】:

              我认为上面的例子是正确的。但你真的不需要设置

              request.setAttribute("selectedDept", selectedDept);
              

              您可以重复使用来自 JSTL 的信息,只需执行类似的操作..

              <!DOCTYPE html>
              <html lang="en">
              <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
              <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
              <head>
                  <script src="../js/jquery-1.8.1.min.js"></script>
              </head>
              <body>
                  <c:set var="authors" value="aaa,bbb,ccc,ddd,eee,fff,ggg" scope="application" />
                  <c:out value="Before : ${param.Author}"/>
                  <form action="TestSelect.action">
                      <label>Author
                          <select id="Author" name="Author">
                              <c:forEach items="${fn:split(authors, ',')}" var="author">
                                  <option value="${author}" ${author == param.Author ? 'selected' : ''}>${author}</option>
                              </c:forEach>
                          </select>
                      </label>
                      <button type="submit" value="submit" name="Submit"></button>
                      <Br>
                      <c:out value="After :   ${param.Author}"/>
                  </form>
              </body>
              </html>
              

              【讨论】:

                【解决方案8】:

                如果你不介意使用 jQuery,你可以使用下面的代码:

                    <script>
                     $(document).ready(function(){
                           $("#department").val("${requestScope.selectedDepartment}").attr('selected', 'selected');
                     });
                     </script>
                
                
                    <select id="department" name="department">
                      <c:forEach var="item" items="${dept}">
                        <option value="${item.key}">${item.value}</option>
                      </c:forEach>
                    </select>
                

                在您的 Servlet 中添加以下内容:

                        request.setAttribute("selectedDepartment", YOUR_SELECTED_DEPARTMENT );
                

                【讨论】:

                • 谢谢 Uri,我会试试这个。
                • 如果禁用了 JS,此方法将失败。
                • @Uri 在这里如何指定 servlet 类?因为对于我的数据表,我使用的是 servlet,所以我会为选择组件指定另一个 servlet 控制器。
                • @Polppan 你的意思是如何从你的 JSP 页面引用另一个控制器?如果是这样,您可以使用 return ModelAndView 和主控制器中的另一个控制器名称,或者将所需的 Java 行为添加到主控制器。我认为这个问题应该有不同的帖子......
                猜你喜欢
                • 1970-01-01
                • 2011-02-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-12-02
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多