Jsp 比较JSTL/EL中的数值
在JSTL中,我用以下方式比较数值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
<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}"/>