2016-06-29 3 views
1

Modell Klasse --Cancellation hat einen Satz [cancellationDetails]. Ich möchte die Objekte dieser Menge in einer JSP-Seite anzeigen.Unerwarteter Body des Tags "c: set" -Tag mit seinen Attributen

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; 

-Controller

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

JSP -> Der Versuch, den Satz aus der Liste angezeigt werden soll.

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

Fehler

Encountered illegal body of tag "c:set" tag, given its attributes.</p><p>181: 
+0

versuchen, den Var-Namen von Set in einen anderen String zu ändern !! – PacMan

Antwort

0

Encountered illegal Körper tag "c: set" Tag, seine Attribute gegeben.

Die Fehlermeldung besagt im Wesentlichen, dass das <c:set>-Tag keinen Körper haben soll.

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

Stattdessen Sie diese Syntax benötigen:

Mit anderen Worten, es ist nicht diese Syntax zu haben, erlaubt

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

Die Setvariable in späteren Tags im gleichen Umfang nur verfügbar sind .

Um über eine Sammlung zu iterieren, benötigen Sie tatsächlich eine andere <c:forEach>. Anstatt also <c:out value="${set.achRejectAmount}" /> und dass <c:set> er so sollte tun:

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

Danke für Ihre Antwort. Ich tat das zuerst, aber in diesem Fall bekam ich diesen Fehler: javax.el.PropertyNotFoundException: Eigenschaft 'achRejectAmount' nicht gefunden in Typ org.hibernate.collection.internal.PersistentSet. – Rishi

+0

Vielen Dank! Es funktioniert jetzt!! – Rishi

+0

Sicher! Danke, dass ich das getan habe. – Rishi

0

Die Antwort von @BalusC ist nicht ganz korrekt. Sie dürfen Inhalte in einem <c:set> -Tag haben. Sie dürfen jedoch keine Inhalte in einem <c:set> -Tag haben, wenn es bereits das Attribut value="" enthält. (Was sinnvoll ist, da der JSP-Interpreter nicht weiß, was er setzen soll, wenn beide vorhanden sind).

Dies ist auch das von @Rishi veröffentlichte Code-Beispiel: Die JSP enthält sowohl das value="" -Attribut als auch einen Inhalt im Body des Tags.

ich auf diese Frage gestolpert, weil ich var="" und value="" in meinem JSP gemischt:

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

Es sollte offensichtlich sagen var="foo" stattdessen so sein, bewusst.