遇到标签的非法主体 "c:set" 标签,给定其属性
Encountered illegal body of tag "c:set" tag, given its attributes
型号Class --取消有一组[取消详细信息]。我想在 jsp 页面中显示该集合的对象。
public class Cancellation {
@OneToMany(fetch = FetchType.LAZY, mappedBy="cancellation")
private Set<cancellationDetails> cancel ;
public class cancellationDetails {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cancelId", nullable = false)
private Cancellation cancellation;
控制器
@RequestMapping(value = "/cancellationRecords", method = RequestMethod.GET)
public ModelAndView getList() {
List<Cancellation> cancellationRecords = dataservice.getCancellationRecords();
return new ModelAndView("master/CancellationRecords_master","cancellationList",cancellationRecords);
}
JSP --> 尝试显示列表中的集合。
<c:forEach items="${cancellationList}" var="user">
<c:set value ="${cancellationList.cancel}" var="set">
<tr>
<td><c:out value="${user.cancelId}" /></td>
<td><c:out value="${user.merchant.merchant_name}" /></td>
<td><c:out value="${user.merchantNBR}" /></td>
<td><c:out value="${user.merchant.merchant_status}" /></td>
<td><c:out value="${user.merchant.handin_date}" /></td>
<td><c:out value="${user.merchant.close_date}" /></td>
<td><c:out value="${user.closingReason}" /></td>
<!--from set--> <td><c:out value="${set.achRejectAmount}"/></td>
<td><c:out value="${user.merchant.nsbcagent_id}" /></td>
<td><c:out value="${user.merchant.nsbcagent_name}" /></td>
</tr>
</c:set>
</c:forEach>
错误
Encountered illegal body of tag "c:set" tag, given its attributes.</p><p>181:
Encountered illegal body of tag "c:set" tag, given its attributes.
错误消息基本上是说 <c:set>
标签不应该有正文。
换句话说,不允许有这样的语法:
<c:set ...>
<some />
<other />
<tags />
</c:set>
相反,您需要以下语法:
<c:set ... />
<some />
<other />
<tags />
set 变量仅在同一范围内的后续标记中可用。
也就是说,为了迭代一个集合,您实际上需要另一个 <c:forEach>
。所以,而不是 <c:out value="${set.achRejectAmount}" />
和 <c:set>
你应该这样做:
<c:forEach items="${user.cancel}" var="cancel">
<c:out value="${cancel.achRejectAmount}" />
</c:forEach>
@BalusC 的回答并不完全正确。您可以在 <c:set>
标签中包含内容。但是,当 <c:set>
标签已经包含属性 value=""
时,您不能在该标签中添加内容。 (这是有道理的,因为 JSP 解释器不知道在两者都存在时设置什么)。
这也是@Rishi 发布的代码示例:JSP 包含 value=""
属性以及标签正文中的内容。
我偶然发现了这个问题,因为我在 JSP:
中混淆了 var=""
和 value=""
<c:set value="foo">Hello World</c:set>
显然应该改为 var="foo"
,所以请注意这一点。
型号Class --取消有一组[取消详细信息]。我想在 jsp 页面中显示该集合的对象。
public class Cancellation {
@OneToMany(fetch = FetchType.LAZY, mappedBy="cancellation")
private Set<cancellationDetails> cancel ;
public class cancellationDetails {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cancelId", nullable = false)
private Cancellation cancellation;
控制器
@RequestMapping(value = "/cancellationRecords", method = RequestMethod.GET)
public ModelAndView getList() {
List<Cancellation> cancellationRecords = dataservice.getCancellationRecords();
return new ModelAndView("master/CancellationRecords_master","cancellationList",cancellationRecords);
}
JSP --> 尝试显示列表中的集合。
<c:forEach items="${cancellationList}" var="user">
<c:set value ="${cancellationList.cancel}" var="set">
<tr>
<td><c:out value="${user.cancelId}" /></td>
<td><c:out value="${user.merchant.merchant_name}" /></td>
<td><c:out value="${user.merchantNBR}" /></td>
<td><c:out value="${user.merchant.merchant_status}" /></td>
<td><c:out value="${user.merchant.handin_date}" /></td>
<td><c:out value="${user.merchant.close_date}" /></td>
<td><c:out value="${user.closingReason}" /></td>
<!--from set--> <td><c:out value="${set.achRejectAmount}"/></td>
<td><c:out value="${user.merchant.nsbcagent_id}" /></td>
<td><c:out value="${user.merchant.nsbcagent_name}" /></td>
</tr>
</c:set>
</c:forEach>
错误
Encountered illegal body of tag "c:set" tag, given its attributes.</p><p>181:
Encountered illegal body of tag "c:set" tag, given its attributes.
错误消息基本上是说 <c:set>
标签不应该有正文。
换句话说,不允许有这样的语法:
<c:set ...>
<some />
<other />
<tags />
</c:set>
相反,您需要以下语法:
<c:set ... />
<some />
<other />
<tags />
set 变量仅在同一范围内的后续标记中可用。
也就是说,为了迭代一个集合,您实际上需要另一个 <c:forEach>
。所以,而不是 <c:out value="${set.achRejectAmount}" />
和 <c:set>
你应该这样做:
<c:forEach items="${user.cancel}" var="cancel">
<c:out value="${cancel.achRejectAmount}" />
</c:forEach>
@BalusC 的回答并不完全正确。您可以在 <c:set>
标签中包含内容。但是,当 <c:set>
标签已经包含属性 value=""
时,您不能在该标签中添加内容。 (这是有道理的,因为 JSP 解释器不知道在两者都存在时设置什么)。
这也是@Rishi 发布的代码示例:JSP 包含 value=""
属性以及标签正文中的内容。
我偶然发现了这个问题,因为我在 JSP:
中混淆了var=""
和 value=""
<c:set value="foo">Hello World</c:set>
显然应该改为 var="foo"
,所以请注意这一点。