Jsp 比较JSTL/EL中的数值

Jsp 比较JSTL/EL中的数值,jsp,jstl,el,Jsp,Jstl,El,在JSTL中,我用以下方式比较数值 <c:set var="testValue" value="10"/> <c:choose> <c:when test="${testValue==10}"> <c:out value="Test is successful."/> </c:when> <c:otherwise> <c:out value="Test is u

在JSTL中,我用以下方式比较数值

<c:set var="testValue" value="10"/>

<c:choose>
    <c:when test="${testValue==10}">
        <c:out value="Test is successful."/>
    </c:when>
    <c:otherwise>
        <c:out value="Test is unsuccessful."/>
    </c:otherwise>
</c:choose>
然后测试失败,出现以下异常

javax.el.ELException:无法转换类的xxx类型 类java.lang.Long的java.lang.String

因为字符串不能解析为
Long
。比较是按字典顺序进行的

这可以通过如下使用EL来避免

<c:set var="testValue" value="${xxx}"/>

然后在上面的循环中使用它们,或者有没有一种简洁的方法来避免解析异常(如果值不可解析)?

首先,我根本不在乎我的JSP是否因为恶意用户更改参数值而生成异常


但如果使用MVC模式,并开始使用浏览器发送的参数填充命令/表单对象,则不会发生这种情况。这样,您就可以使用类型化变量而不是字符串,并将这些类型化变量与来自数据库的类型化值进行比较。

首先,我根本不在乎我的JSP是否因恶意用户更改参数值而生成异常


但如果使用MVC模式,并开始使用浏览器发送的参数填充命令/表单对象,则不会发生这种情况。这样,您就可以使用类型化变量而不是字符串,并将这些类型化变量与来自数据库的类型化值进行比较。

这是关于Spring/Hibernate的,是的,我正在为此使用自定义属性编辑器,但有两个参数,必要时,
param.id
作为查询字符串提供。因此,即使是普通用户也很可能会替换它的值。我的观点是,当收到请求时,action/servlet应该做的第一件事就是将该ID转换为Long(以及将其他参数转换为适当的类型:日期、整数、布尔值等)。如果此转换失败,则应显示验证错误消息(如果用户输入参数),或显示一般错误页面(如果用户不是手动输入参数,而是从选项列表、链接、复选框、隐藏字段等中选择参数)这是关于Spring/Hibernate的,是的,我正在为此使用自定义属性编辑器,但在问题中的两个参数中,
param.id
在必要时作为查询字符串提供。因此,即使是普通用户也很可能会替换它的值。我的观点是,当收到请求时,action/servlet应该做的第一件事就是将该ID转换为Long(以及将其他参数转换为适当的类型:日期、整数、布尔值等)。如果此转换失败,则应显示验证错误消息(如果用户输入参数),或显示一般错误页面(如果用户不是手动输入参数,而是从选项列表、链接、复选框、隐藏字段等中选择参数)
<c:set var="testValue" value="${xxx}"/>
<c:forEach var="row" items="${list}" varStatus="loop">
    <c:choose>
        <c:when test="${param.edId==row.id || row.id==param.id}">
            // Do something.
        </c:when>

        <c:otherwise>
            // Do something.
        </c:otherwise>
    </c:choose>
</c:foreach>
<c:set var="paramId" value="${param.id}"/>
<c:set var="paramEdId" value="${param.edId}"/>