遇到非法的标签主体" c:set"标签,给定其属性

时间:2016-06-29 16:52:05

标签: jsp jstl

Model Class --Cancellation有一个[cancellationDetails]集合。我想在jsp页面中显示该组的对象。

AppServiceProvider

控制器

    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;

JSP - &gt;试图从列表中显示该组。

     @RequestMapping(value = "/cancellationRecords", method = RequestMethod.GET)
   public ModelAndView getList() {
    List<Cancellation> cancellationRecords = dataservice.getCancellationRecords();
    return new ModelAndView("master/CancellationRecords_master","cancellationList",cancellationRecords);
}

错误

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

2 个答案:

答案 0 :(得分:2)

  

遇到非法标签&#34; c:set&#34;标签,给定其属性。

错误消息基本上表示<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>

<suite name="Excel Control File Suite Set" 
        thread-count="30" configfailurepolicy="continue">

        <test name="Excel Test" parallel="instances">
            <classes>
                <class name="com.selenium.engine.TestRunner1">
                </class>
            </classes>
        </test>
        <test name="Excel Test 1" parallel="instances">
            <classes>
                <class name="com.selenium.engine.TestRunner2">
                </class>
            </classes>
        </test>
    </suite>

答案 1 :(得分:0)

@BalusC的答案并不完全正确。您可以在<c:set> - 标记中包含内容。但是,如果内容已包含属性<c:set>,则不允许您在value="" - 标记中包含内容。 (这是有道理的,因为JSP解释器在两者都存在时不知道要设置什么)。

这也是@Rishi发布的代码示例:JSP包含value="" - 属性以及标记正文中的内容。

我偶然发现了这个问题,因为我在我的JSP中混淆了var=""value=""

<c:set value="foo">Hello World</c:set>

显然应该说var="foo",所以要注意这一点。