JSP试图将String转换为Long

时间:2014-09-19 10:19:19

标签: java jsp spring-mvc servlets jstl

我的jsp中有一个<td>,其中有一个<spring:bind>标记。

        <td>
          <spring:bind path="mailListRequest.offSeason">
            <select name="<c:out value="${status.expression}" />" id="<c:out value="${status.expression}" />">
            <option value="0">Select</option>
              <c:forEach var="t" begin="2" step="1" end="5">
                <option value="<c:out value="${t} star"/>" <c:if test="${status.value eq t}"> selected</c:if>><c:out value="${t} star"/>
                </option>
              </c:forEach>
              <option value="boutique hotels">boutique hotels</option>

            </select>
          </spring:bind>
        </td>

"mailListRequest.offSeason"是服务器端的string(Java)。这里的目标是迭代<c:forEach..>循环变量"t"。因此,迭代将为2,3,4,5;,并且在<option value..>我已经使每次迭代返回一个值前面带有字符串/ star的值,因此输出将是{{1} }。

问题:
问题是每当我选择2 star, 3 star, 4 star...循环中的一个选项或选项<c:forEach>时,我的JSP中都会出现错误:

错误
"botique hotels "

这让我感到困惑,因为javax.servlet.jsp.JspTagException: javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "test" with value "${status.value eq t}": An exception occured trying to convert String "2 star" to type "java.lang.Long" (null)被设置为"mailListRequest.offSeason"而我的选项中的值是字符串值(I PRESUME)。也许这是string我格式错误。

1 个答案:

答案 0 :(得分:2)

我可以收集您的选择值:

"1 star", "2 star", "3 star", "4 star", "5 star" 

但是在<c:forEach>循环内,t的值将按顺序排列:1,2,3,4,5

因此,您的测试是将字符串"x star"t进行比较,这是一个长整数,并且无法将左操作数转换为右操作数的类型。

您可能想在循环中创建一个辅助变量:

<c:set var="stringVal" value="${t} star" />

然后在测试中使用它:

<c:if test="${status.value eq stringVal}">