遇到标签的非法主体 "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",所以请注意这一点。