<c:forEach var="cid" items="${clist}"> <option value="${cid.id}" ${cid.id==String.valueOf(blist.categoryId)?"seleced":""}>${cId.categoryName}</option> </c:forEach>出现java.lang.NumberFormatException: For input string: "categoryId"
时间: 2023-07-06 21:28:04 浏览: 89
这个错误依旧是因为 `blist.categoryId` 的值是一个字符串类型的 "categoryId",并不是一个数字类型。
你可以在代码中加入一个判断,判断 `blist.categoryId` 是否是一个数字类型的字符串。如果不是数字类型的字符串,可以将其默认值设置为0或者其他你认为合适的值。
以下是一个可能的解决方案:
```
<c:forEach var="cid" items="${clist}">
<option value="${cid.id}" ${cid.id==(blist.categoryId!=null&&blist.categoryId.matches("\\d+"))?Integer.parseInt(blist.categoryId):0?"selected":""}>${cId.categoryName}</option>
</c:forEach>
```
这里使用了正则表达式 `\\d+` 来判断 `blist.categoryId` 是否是一个数字类型的字符串。如果是数字类型的字符串,就将其转换为数字类型进行比较;如果不是数字类型的字符串,就将其默认值设置为0。这样就可以避免出现类型不匹配的问题。
相关问题
<c:forEach var="cid" items="${clist}"> <option value="${cid.id}" ${cid.id==blist.categoryId?"seleced":""}>${cId.categoryName}</option> </c:forEach>这段代码中出现java.lang.NumberFormatException: For input string: "categoryId"
这个错误的原因是在比较 `cid.id` 和 `blist.categoryId` 的时候,`blist.categoryId` 的值不是一个数字类型,而是一个字符串类型的 "categoryId"。因此,在比较时会出现字符串无法转换为数字的异常。
为了解决这个问题,你需要确保 `blist.categoryId` 的值是一个数字类型。你可以在 `${clist}` 中使用 `parseInt()` 或者 `valueOf()` 方法,将其转换为数字类型。或者你可以在比较时将 `cid.id` 也转换为字符串类型,这样就可以避免出现类型不匹配的问题。
以下是一个可能的解决方案:
```
<c:forEach var="cid" items="${clist}">
<option value="${cid.id}" ${cid.id==String.valueOf(blist.categoryId)?"selected":""}>${cId.categoryName}</option>
</c:forEach>
```
这样,就可以将 `blist.categoryId` 转换为字符串类型,避免出现类型不匹配的问题。
<c:forEach var="list" items="${list.getPbjs() }">
这段 JSP 代码使用了 JSTL 标签库的 `<c:forEach>` 标签来遍历一个名为 `list` 的对象中的数据,并将数据存储在一个名为 `list` 的变量中。
具体来说,`${list.getPbjs()}` 表达式用于获取 `list` 对象中名为 `getPbjs` 的方法的返回值,这个返回值应该是一个列表。然后,`<c:forEach>` 标签使用 `items` 属性来指定要遍历的列表,将列表中的每个元素存储在一个名为 `list` 的变量中。
需要注意的是,这个 JSP 页面中存在一个潜在的问题:变量名重复。由于 JSP 页面中的变量都是在一个命名空间中定义的,因此如果多个变量的名称相同,就会导致变量值被覆盖的问题。在这个例子中,由于 `<c:forEach>` 标签将列表元素存储在名为 `list` 的变量中,而且 JSP 页面中已经存在一个名为 `list` 的变量,因此可能会导致变量值被覆盖的问题。
为了避免这个问题,可以将 `<c:forEach>` 标签中的变量名改为其他名称,例如:
```jsp
<c:forEach var="item" items="${list.getPbjs() }">
<tr>
<td><c:out value="${item.id}"/></td>
<td><c:out value="${item.name}"/></td>
<td><c:out value="${item.age}"/></td>
</tr>
</c:forEach>
```
在这个例子中,我们将 `<c:forEach>` 标签中的变量名从 `list` 改为 `item`,避免了变量名重复的问题。
阅读全文