javascript - 如何在 Spring 中使用 JSTL 在下拉列表中显示数据?

标签 javascript jquery spring jsp jstl

我有 PersonDTO 对象,其中包含:

String name;
List<String> skills;//getter setter

当第一次加载 jsp 时,我从 @ModelAttribute 获取下拉值,如下所示:

List<PersonDTO> personInfo= personService.getInfomation(id);    
model.addAttribute("personInfo",personDTO);  

并在jsp中显示:

<div>
<form:select  name="name" path="name">
<c:forEach items="${personInfo}" var="var">
<form:option value="${var.name}">"${var.name}" /></form:option>
</c:forEach>
</form:select>
<div>
<div>
<form:select  name="skills" path="skills">
<c:forEach items="${personInfo.skills}" var="skill">
<form:option value="${skill}">"${skill}" /></form:option>
</c:forEach>
</form:select>
<div>

现在我该怎么做:如果用户更改第一个下拉列表中的名称,那么第二个下拉列表值必须根据所选人员拥有的技能自动更改。我正在使用 Spring 4、maven、JSTL、jQuery、 javascript 和 spring 表单标签。这都是客户端。这里我们没有使用名称参数进行任何 ajax 调用来获取技能值并将其显示在下拉列表中。请帮忙。谢谢

最佳答案

您只需要一个包含所有名称和技能的 javascript 对象,因此当名称更改时,技能已经在客户端可用。通常,您最好通过将列表序列化为 Controller 中的 JSON 字符串来完成此操作,但为了避免告诉您将 Gson 之类的新依赖项添加到项目中,您可以通过在脚本标记中填充 javascript 对象来完成此操作。

<script type="text/javascript">
    var peopleSkills = {};  

    <c:forEach var="person" items="${personInfo}">
        peopleSkills['${person.name}'] = new Array();
        <c:forEach var="skill" items="${person.skills}">
            peopleSkills['${person.name}'].push('${skill}');
        </c:forEach>
    </c:forEach>

    function updateSkills(name) {
        var skillsArray = peopleSkills[name];
        var markup = ''
        for (var i = 0; i < skillsArray.length; i++)
            markup += '<option value="' + skillsArray[i] + '">' + skillsArray[i] + '</option>';
        $('#skillsselect').html(markup);            
    }   

    $(document).ready(function(){
        updateSkills($('#nameselect').val()); // for initial option on page load

        $('#nameselect').change(function(){
            var personName = $(this).val();
            updateSkills(personName);   
        });
    });
</script>

<div>
    <form:select name="name" id="nameselect" path="name">
        <c:forEach items="${personInfo}" var="var">
            <form:option value="${var.name}">"${var.name}" /></form:option>
        </c:forEach>
    </form:select>
<div>
<div>
    <form:select name="skills" id="skillsselect" path="skills"></form:select>
<div>

一定要考虑在 Controller 中创建 JSON 字符串,以避免在脚本标记中混合服务器端和客户端代码。还要准备好两个不同的人同名的情况。

关于javascript - 如何在 Spring 中使用 JSTL 在下拉列表中显示数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692790/

相关文章:

javascript - jQuery - 向上键转到下一个输入字段

javascript - Mustache JS 和合并模板

javascript - 根据滚动位置更改 div 内容

java - java类JAVA中的Spring xml配置重写

java - 如何使用 Neo4j Ha 集群配置 Spring?

java - 服务器响应 404 - POST 请求

javascript - 如何从 javascript 运行验证器?

javascript - 未捕获的类型错误 : Cannot read property 'submit' of null

javascript - rails : Calling to_json method in HTML

javascript - 如何设计动态菜单