gpt4 book ai didi

java - JSP 中的级联下拉列表

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:08 25 4
gpt4 key购买 nike

我是 JSP 新手,我尝试为我的问题找到解决方案,但不幸的是我找不到。所以我想做的是有两个下拉菜单,当我从第一个列表中选择一个值时,必须过滤第二个下拉菜单。这是我到目前为止所做的: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'/>

它的工作方式类似于 charm,其中 c 定义为:

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

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

谢谢

最佳答案

问题与您的脚本未触发 onchange 事件无关,正如您在嵌入代码片段中看到的那样,相反,您正在尝试在客户端调用 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>
"}"

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

只要触发 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>

关于java - JSP 中的级联下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com