Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jsp中维护select标记中的selected选项?_Jsp_El - Fatal编程技术网

如何在jsp中维护select标记中的selected选项?

如何在jsp中维护select标记中的selected选项?,jsp,el,Jsp,El,我已经阅读了许多解决上述问题的方法,但我的具体问题有一些复杂之处。我有一个select标记,它的选项是使用jstlforeach标记填充1-20的,我希望在用户重新访问页面时自动选择以前选择的选项。对于列表类型属性中的项目,select标记位于另一个forEach中,因此select 1-20在页面上重复多次 页面用于选择要添加到购物车的项目,选择1-20用于数量。我希望在用户提交表单后重新访问页面时,该数量保持一致。由于对另一个问题的回答,建议stream()使用paramValues,我

我已经阅读了许多解决上述问题的方法,但我的具体问题有一些复杂之处。我有一个select标记,它的选项是使用jstlforeach标记填充1-20的,我希望在用户重新访问页面时自动选择以前选择的选项。对于列表类型属性中的项目,select标记位于另一个forEach中,因此select 1-20在页面上重复多次

页面用于选择要添加到购物车的项目,选择1-20用于数量。我希望在用户提交表单后重新访问页面时,该数量保持一致。由于对另一个问题的回答,建议stream()使用paramValues,我已经完成了一些类似的工作,在重访时,每个项目的复选框都保持选中状态

我尝试对select 1-20使用类似的方法,但没有成功。我曾考虑过使用javascript,但我的经验很少,但这很复杂,因为出于必要,我选择的名称是页面上每个项目的唯一ID,使用EL分配

这是代码,无法保持以前选择的数量,但成功保持以前选择的项目处于选中状态:

<c:forEach var="item" items="${items}">
    <c:if test="${item.category == 'Burger'}">
        <tr>
            <td><input type="checkbox" name="itemID" value="${item.itemID}" ${paramValues.itemID.stream().anyMatch(v->v == item.itemID).get() ? 'checked' : ''}></td>
            <td>
                <select name="${item.itemID}">
                    <c:forEach var="i" begin="1" end="20">
                        <option value="${i}">${i}</option>
                    </c:forEach>
                </select>
            </td>
            <td>${item.name}</td>
            <td><fmt:formatNumber value="${item.price}" type="currency"/></td>
        </tr>
    </c:if>
</c:forEach>

v==item.itemID).get()?'选中“:”}>
${i}
${item.name}
我尝试将stream()用于select 1-20的操作失败:

<c:forEach var="i" begin="1" end="20">
    <option value="${i}" ${paramValues.item.itemID.stream().anyMatch(v->v == i).get() ? 'selected' : ''}>${i}</option>
</c:forEach>

v==i.get()?'所选“:”}>${i}
上述解决方案取自以下答案中给出的示例代码:

<select name="boo" multiple>
    <option value="a" ${paramValues.boo.stream().anyMatch(v->v == 'a').get() ? 'selected' : ''}>label a</option>
    <option value="b" ${paramValues.boo.stream().anyMatch(v->v == 'b').get() ? 'selected' : ''}>label b</option>
    <option value="c" ${paramValues.boo.stream().anyMatch(v->v == 'c').get() ? 'selected' : ''}>label c</option>
</select>

v=='a')。get()?'所选“:”}>标签a
v=='b')。get()?'所选“:”}>标签b
v=='c')。get()?'所选“:”}>标签c
当我试着在我的代码中插入它只是为了测试时,它甚至不起作用,而且它甚至没有与forEach一起使用的复杂性,等等。我不知道为什么,正如在我的第一块代码中看到的,同样的解决方案对我的复选框起作用


非常感谢您的帮助。

这是因为您为HTML元素使用了动态名称:

<select name="${item.itemID}">
这基本上是查找具有文字名称“item”的请求参数值,然后尝试将其视为javabean以获取文字属性名称“itemID”。在封面下,它与request.getParameterValues(“item”).getItemID()具有相同的效果。这是不对的。您需要使用动态名称
${item.itemID}
查找请求参数值。基本上,您希望得到与
request.getParameterValues(item.getItemID())
相同的效果

换言之,这必须对您有效:

<option value="${i}" ${paramValues[item.itemID].stream().anyMatch(v->v == i).get() ? 'selected' : ''}>${i}</option>
v==i.get()?'所选“:”}>${i}
另见:

啊,这是有道理的;非常感谢。然而,这给出了一个“java.lang.Integer不能转换为java.lang.String”的500个异常。现在,item.itemID是一个int,但我不太明白该错误是如何发生的,因为我理解stream()的方式是将其视为一个对象。然后将其转换为字符串作为
${item.itemID.toString()}
${paramValues[item.itemID]}
<option value="${i}" ${paramValues[item.itemID].stream().anyMatch(v->v == i).get() ? 'selected' : ''}>${i}</option>