根据id查出所有name第一个下拉中显示,再根据第一个下拉菜单中选中的name查询出所有这个名字下的cname,都在一个material表中。
id int
name varchar
cname varchar
这个老项目用struts1写的。最好jquery代码能注释一下,
动态二级联动一直搞不定,求帮忙~~
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- ChatGPTᴼᴾᴱᴺᴬᴵ 2023-12-08 22:57关注
所有内容均由人工智能模型输出,其内容的准确性和完整性无法保证,不代表我的态度或观点。
(通义千问专栏,v2.1.0版本)
该回答引用通义千问大模型,仅提供参考,不保证完全正确
要实现一个基于 Struts1 和 jQuery 的动态二级联动效果,你需要按照以下步骤进行:创建 struts 配置文件:
在struts-config.xml
文件中添加 Action 到你的 JSP 页面。创建 Action 类:
创建一个新的 Java 类来处理 AJAX 请求并返回 JSON 数据。例如,你可以创建一个名为MaterialAction
的类,并为每个请求分别定义findMaterials()
和findCnamesByMaterial()
方法。编写 JSP 页面:
在你的 JSP 页面上创建两个下拉菜单,并使用 jQuery 来处理它们的事件和更新。
以下是一个简化的示例代码:
1. struts-config.xml
<action path="/material/findMaterials" type="com.example.MaterialAction" name="materialForm" scope="request" validate="false"> <forward name="success" path="/WEB-INF/materials.jsp"/> </action> <action path="/material/findCnamesByMaterial" type="com.example.MaterialAction" name="materialForm" scope="request" validate="false"> <forward name="success" path="/WEB-INF/cnames.jsp"/> </action>
2. MaterialAction.java
import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class MaterialAction extends Action { public ActionForward findMaterials(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { List<Material> materials = // 查询所有材料 request.setAttribute("materials", materials); return mapping.findForward("success"); } public ActionForward findCnamesByMaterial(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String materialName = request.getParameter("materialName"); List<String> cnames = // 根据 materialName 查询所有cname request.setAttribute("cnames", cnames); return mapping.findForward("success"); } }
3. materials.jsp
<!-- 引入 jQuery --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- 第一个下拉菜单 --> <select id="materialSelect"> <!-- 使用 struts 的 iterate 标签循环遍历 materials --> <option value="">请选择</option> <logic:iterate id="material" name="materials"> <option value="<bean:write name="material" property="name"/>" > <bean:write name="material" property="name"/> </option> </logic:iterate> </select> <!-- 第二个下拉菜单 --> <select id="cnameSelect"> <!-- 下面的内容将在 AJAX 调用后被替换 --> </select> <!-- JavaScript 代码 --> <script> $(document).ready(function() { $('#materialSelect').change(function() { var selectedMaterial = $(this).val(); if (selectedMaterial) { $.ajax({ url: '/your_project_name/material/findCnamesByMaterial.do', data: { 'materialName': selectedMaterial }, success: function(data) { // 清空当前选项 $('#cnameSelect').empty(); // 添加新选项 for (var i = 0; i < data.length; i++) { $('<option/>', { value: data[i], text: data[i] }).appendTo('#cnameSelect'); } } }); } else { // 如果未选择任何材料,则清空第二个下拉菜单 $('#cnameSelect').empty(); } }); }); </script>
这个例子中,当用户在第一个下拉菜单(
#materialSelect
)中选择了一个选项时,jQuery 的change
事件处理器会被触发。然后,它会发送一个 AJAX 请求到/your_project_name/material/findCnamesByMaterial.do
,并将选中的材料名称作为参数传递。服务器端的findCnamesByMaterial
方法将根据这个参数查询所有相关的 cname,并以 JSON 数组的形式返回给客户端。最后,jQuery 将接收到的数据解析为数组,并根据这些数据更新第二个下拉菜单(#cnameSelect
)。解决 无用评论 打赏 举报
悬赏问题
- ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
- ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
- ¥15 Arcgis相交分析无法绘制一个或多个图形
- ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
- ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
- ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
- ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
- ¥30 3天&7天&&15天&销量如何统计同一行
- ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
- ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型