2014-09-19 79 views
1

我在我的jsp中有<td>,它有一個<spring:bind>標記。JSP嘗試將字符串轉換爲長

 <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"是在服務器側(Java)的一個string。這裏的目標是迭代<c:forEach..>循環變量"t"。因此,迭代將是2,3,4,5;,並在<option value..>我已經使每次迭代返回一個值與字符串/字star在它的前面,因此輸出將是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"設置爲string和我的選項中的值是字符串值(我PRESUME)。也許這是我格式錯誤的<option value="<c:out value="${t} star"/>

回答

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}">