【问题标题】:Cascaded DropDown Lists in JSP [duplicate]JSP中的级联下拉列表[重复]
【发布时间】:2015-01-26 11:42:04
【问题描述】:

我是 JSP 的新手,我试图找到解决问题的方法,但不幸的是我找不到。 所以我想要做的是有 2 个下拉列表,当我从第一个列表中选择一个值时,必须过滤第二个下拉列表。 这是我到目前为止所做的: Servlet 将以下对象传递给 jsp:

    getServletContext().setAttribute("foodDetails", fds.findAll());

    request.getRequestDispatcher(url).forward(request, response);

在 jsp 代码中,我创建了两个下拉列表并使用以下代码填充列表:

   <tr>
    <td>Detay Tipi 1</td>   
     <td>
       <select name="tip" id="tip" onchange="">     
         <option value="porsiyon">porsiyon</option>
         <option value="extra">extra</option>
       </select>  
     </td>
     <td>
        <select name="tip2" id="tip2" onchange="">
          <option value"Lütfen Tip Seçiniz">Lütfen Tip Seçiniz</option>
        </select>  
     </td>
   </tr>

因此,当用户从第一个下拉列表中选择“porsiyon”时,第二个列表将填充来自 ${foodDetails} 的值。为了实现这一点,我使用以下代码覆盖了第一个下拉菜单的 onchange 方法:

  <script type="text/javascript">
     $(document).ready(function(){
     $("#tip").change(function(){
     tip2.length = 1;
     var x=$(this).val();
     <c:forEach var="fd" items="${foodDetails}">
     <c:if test="${fd.detailcategory == x}"> 
     tip2.options[tip2.options.length]  = new Option("${fd.name}","${fd.name}");
     </c:if>
     </c:forEach>
       });
       });
</script>

不幸的是,当我切换时,这不起作用

  var x=$(this).val();

具有静态值,例如:

  <c:set var="x" scope="session" value='ekstra'/>

它像魅力一样工作,其中 c 被定义为:

  <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>. 

我可能犯了一个非常明显的错误,但我不知道是什么。这是我的第一个 jsp 页面,所以请放轻松 :) PS:我认为不需要上课来回答这个问题,但 fooddetails 有一个 fooddetail 列表,其中 fooddetail.detailcategory 可以是“porsiyon”或“ekstra”。

谢谢,

【问题讨论】:

  • 我不同意这是重复的。我正在尝试去后端获取一些“价值”。我只是想根据第一个下拉值过滤第二个列表。

标签: java jquery html jsp jstl


【解决方案1】:

问题与您的脚本没有触发onchange 事件无关,正如您在嵌入 sn-p 中看到的那样,相反,您正试图在客户端而不是在服务器中调用 JSTL 函数一边。

您可以尝试以下方法:

  1. 创建一个构建基于 JSON 的响应的 JSP。
  2. 使用AJAX调用JSP
  3. 遍历您的响应以检索过滤结果。

假设您有一个 foodDetails.jsp,它接收一个名为 category 的过滤参数。使用此参数,您可以从 JSP 构建基于 JSON 的响应。

foodDetails.jsp

"{filteredList: "
<c:forEach var="fd" "items="${foodDetails}">
    <c:if test="${fd.detailcategory == category}">
        "${fd.detailcategory},"     
    </c:if>
</c:forEach>
"}"

来自您的客户端(Web 浏览器)

每当onchange 事件被触发时,您都可以使用AJAX 调用foodDetails.jsp...

jQuery(document).ready(function(){
        jQuery("#tip").change(function() {
    var category = jQuery(this).val();
    addFilteredItems(category);
});

function addFilteredItems(category) {
    jQuery.ajax({
        type: "GET",
        url: "/path/to/the/foodDetails.jsp?category=" + category,
        dataType: "json"
        _: jQuery.now()
    }).done(function(data) {
        jQuery.each(data, function(k, v) {
            var result = v["filteredList"];
            jQuery.each(result.split(","), function() {
                var item = jQuery(this).val();
                // add options
            });
        });
    });
}

片段

jQuery(document).ready(function(){
  jQuery("#tip").change(function(){
    var x= $(this).val();
    alert(x);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<tr>
  <td>Detay Tipi 1</td>   
    <td>
      <select name="tip" id="tip" onchange="">     
        <option value="porsiyon">porsiyon</option>
        <option value="extra">extra</option>
      </select>  
    </td>
    <td>
      <select name="tip2" id="tip2" onchange="">
        <option value"Lütfen Tip Seçiniz">Lütfen Tip Seçiniz</option>
      </select>  
    </td>
</tr>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多