2016-06-29 4 views
1

私はそのセットのオブジェクトをjspページに表示したい。モデルのクラス - キャンセルには[cancelationDetails]が設定されています。タグ "c:set"タグの不正な本体が見つかりました。

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: 
+0

var nameを別の文字列に変更しようとしてください! – PacMan

答えて

0

が発生しました違法なボディタグの "C:セット" タグ、その属性を与えられました。

エラーメッセージには、基本的に<c:set>タグには本文が含まれていないと表示されています。

つまり

、それはこの構文を持つことが許されていない:

<c:set ...> 
    <some /> 
    <other /> 
    <tags /> 
</c:set> 

代わりに、この構文を必要とする:

<c:set ... /> 
<some /> 
<other /> 
<tags /> 

セット変数が同じスコープの後のタグでだけ利用可能です。

つまり、コレクションを繰り返し処理するには、実際に別の<c:forEach>が必要です。だから、代わりに<c:out value="${set.achRejectAmount}" />、あなたはこのようにやるべきことを<c:set>

<c:forEach items="${user.cancel}" var="cancel"> 
    <c:out value="${cancel.achRejectAmount}" /> 
</c:forEach> 
+0

ご返信ありがとうございます。私は当初それを行いましたが、その場合、このエラーが発生しました:javax.el.PropertyNotFoundException:org.hibernate.collection.internal.PersistentSet型で 'achRejectAmount'プロパティが見つかりません。 – Rishi

+0

ありがとう!それは今作動する!! – Rishi

+0

ありがとう – Rishi

0

@BalusCの答えは完全に間違っています。あなたは<c:set>のタグの内容を持つことができます。ただし、すでにvalue=""という属性が含まれている場合は、<c:set>のタグに内容を含めることはできません。 (JSPインタープリタは両方が存在するときに何を設定するか分からないので意味があります)。

これは@Rishiによって投稿されたコードサンプルでもあります。JSPにはvalue=""属性とタグの本文に内容が含まれています。

私は私のJSPでvar=""value=""を混同しているため、私はこの質問につまずい:

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

それは明らかに代わりvar="foo"を言うので、それに注意する必要があります。

関連する問題