【问题标题】:Exception javax.el.ELException occurs when I compare values in JSP比较 JSP 中的值时发生异常 javax.el.E​​LException
【发布时间】:2015-06-28 01:37:18
【问题描述】:

我有一个jsp代码

<%
String n44rb= "p44_readback";
String reference44rb = ref.getDbTable(n44rb);
%>
<c:set var="reference44rb" value="<%=reference44rb%>"/>

<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.## " var="nf"></fmt:formatNumber>
<td style="${(nf lt 0 ? - (nf) : nf ) le reference44rb ? 'background-color: lime':'background-color: pink'}" >
<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.## (" var="nn"></fmt:formatNumber>
<c:out value="${nn}"></c:out>
<c:choose>
<c:when test="${r.p44_readback-row.p44_readback ne 0}">
<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)/r.p44_readback}" maxFractionDigits="2" minIntegerDigits="2" type="percent" var="mm"></fmt:formatNumber>
<c:out value="${mm}" ></c:out><c:out value=")"></c:out></c:when>
<c:otherwise>
<c:out value="00%)"></c:out>
</c:otherwise></c:choose></td>

r.p44_readback的值是从bean获取的,格式为

Double  doubleValue = Double.valueOf(rs.getString(2));
                             String formattedValue = String.format("%.2f", doubleValue);
                             ref_obj.setBeam_current(formattedValue);

其中 ref_obj 是类对象。

当我运行上面的 java 代码时,我收到错误 Cannot convert -00.02 of type class java.lang.String to class java.lang.Long in td tag line 但是为什么会出现这个错误,这里所有的值都在字符串中。

EDIT-1 我将 reference44rb 从 string 更改为 float as

<%
String n44rb= "p44_readback";
float reference44rb = ref.getDbTable(n44rb);
%>
<c:set var="reference44rb" value="<%=reference44rb%>"/>

<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)}" maxFractionDigits="2" minIntegerDigits="2" var="nf" pattern="##.##"></fmt:formatNumber>
<td style="${(nf lt 0.0 ? - (nf) : nf) le reference44rb ? 'background-color: lime':'background-color: pink'}" >
<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.## (" var="nn"></fmt:formatNumber>
<c:out value="${nn}"></c:out>
<c:choose>
<c:when test="${r.p44_readback-row.p44_readback ne 0}">
<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)/r.p44_readback}" maxFractionDigits="2" minIntegerDigits="2" type="percent" var="mm"></fmt:formatNumber>
<c:out value="${mm}" ></c:out><c:out value=")"></c:out></c:when>
<c:otherwise>
<c:out value="00%)"></c:out>
</c:otherwise></c:choose></td>

我得到了正确的答案,但现在的问题是,当我在 td 标记中执行comapre
&lt;td style="${(nf lt 0.0 ? - (nf) : nf) le reference44rb ? '时,我将 reference44rb 的值设置为 0.01 和nf 也是 0.01 ,然后 显示粉红色 但应该显示绿色,因为我在这里使用了 le 即小于等于运算符,并且两个值都相等。 当我将 reference44rb 的值更改为 0.014 时,会显示绿色 colr。

【问题讨论】:

  • &lt;c:when test="${r.p44_readback-row.p44_readback ne 0.0}"&gt;
  • @JigarJoshi,这个 c:when 标记中有什么内容。它是正确的。
  • 我的意思是 0.0 而不是 0
  • td 标记行中出现错误
  • @JigarJoshi,当我没有在 td 之前比较并且不写 标记时,不会出现错误,但我需要在与 reference44rb 比较之前修剪我的减法值

标签: java string jsp double type-conversion


【解决方案1】:
<td style="${(nf lt 0 ? - (nf) : nf ) le reference44rb ? 'background-color: lime':'background-color: pink'}" >

'reference44rb' 是一个字符串变量。而你正在使用 'le' 运算符。

【讨论】:

  • ,我将reference44rb改为float
  • 据我所知,您的问题在于您所做的算术比较。默认情况下,JSTL 将变量强制为“双”值
  • 是的,问题只是比较。在 question 中查看我上面的编辑
  • 你可以为两者硬编码 .01 并测试输出吗?打印 2 个值并检查它们是否具有更高的精度
【解决方案2】:

你不觉得这里有问题吗:

<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.## (" var="nn"></fmt:formatNumber>

应该是:

<fmt:formatNumber value="${(r.p44_readback-row.p44_readback)}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.##" var="nn"></fmt:formatNumber>

【讨论】:

  • ,我想要带图案的括号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2015-04-16
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多