2016-04-27 13 views
0

Ich habe eine Klasse MemberSale, die Liste der MemberSales-Objekt hat. Meine Anforderung ist. Ich möchte JSP-Datei basierend auf Objekt erstellen.Baum in Jsp mit Rekursion in JSTL nicht anzeigen

Ich bekomme SalesMember-Objekt von der Datenbank und basierend auf der Liste muss ich es in Jsp anzeigen. Dazu benutze ich eine benutzerdefinierte JSTL-Lib.

der Code, den ich versucht habe, aber ich bin nicht ausgegeben

public class SalesPointTagLibHandler extends TagSupport { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    private SalesMember salesMember; 

    @Override 
    public int doStartTag() throws JspException { 
     JspWriter out = pageContext.getOut(); 
     displaySaleMember(out, salesMember,1); 

     return SKIP_BODY; 
    } 

    public void displaySaleMember(JspWriter out, SalesMember salesMember,int n) { 
     try { 
      List<SalesMember> children = salesMember.getChildren(); 
      if (salesMember.getParent() == null) { 
       String entryString = "<div id=\"wrapper\"><span class=\"label\">" + salesMember.getName() + "</span>"; 
       String lvString = "<div class=\"branch lv"+n+"\">"; 
       System.out.println(entryString); 
       System.out.println(lvString); 
       out.println(entryString); 
       out.println(lvString); 
       n=n+1; 
      } 
      else if((children==null ||children.isEmpty()) && salesMember.getParent().getChildren().size()==1){ 
       String entryString="<div id=\"entry sole\"><span class=\"label\">" + salesMember.getName() + "</span></div>"; 
       System.out.println(entryString); 
       out.println(entryString); 
       n=n-1; 
      } 
      else{ 
       String entryString="<div id=\"entry\"><span class=\"label\">" + salesMember.getName() + "</span>"; 
       String lvString = "<div class=\"branch lv"+n+"\">"; 
       System.out.println(entryString); 
       System.out.println(lvString); 
       out.println(entryString); 
       out.println(lvString); 
       n=n+1; 
      } 

      if(children!=null && !children.isEmpty()){ 
      for(int i=0;i<children.size();i++){ 
       displaySaleMember(out,children.get(i),n); 
      } 
      } 

      System.out.println("</div></div>"); 
      out.println("</div></div>"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public SalesMember getSalesMember() { 
     return salesMember; 
    } 

    public void setSalesMember(SalesMember salesMember) { 
     this.salesMember = salesMember; 
    } 

} 

erwartete Ausgabe erwartet zu werden: jsp

<div class="sales"> 
<div id="wrapper"><span class="label">Root</span>//done 
    <div class="branch lv1">//done 
    <div class="entry"><span class="label">Entry-1</span>//done 
     <div class="branch lv2">//done 
     <div class="entry"><span class="label">Entry-1-1</span>//done 
      <div class="branch lv3">//done 
      <div class="entry sole"><span class="label">Entry-1-1-1</span></div>//done 
      </div>//done 
     </div>//done 
     <div class="entry"><span class="label">Entry-1-2</span> 
      <div class="branch lv3"> 
      <div class="entry sole"><span class="label">Entry-1-2-1</span></div> 
      </div> 
     </div> 
     <div class="entry"><span class="label">Entry-1-3</span> 
      <div class="branch lv3"> 
      <div class="entry sole"><span class="label">Entry-1-3-1</span></div> 
      </div> 
     </div> 
     </div> 
    </div> 
    <div class="entry"><span class="label">Entry-2</span></div> 
    <div class="entry"><span class="label">Entry-3</span> 
     <div class="branch lv2"> 
     <div class="entry"><span class="label">Entry-3-1</span></div> 
     <div class="entry"><span class="label">Entry-3-2</span></div> 
     <div class="entry"><span class="label">Entry-3-3</span> 
      <div class="branch lv3"> 
      <div class="entry"><span class="label">Entry-3-3-1</span></div> 
      <div class="entry"><span class="label">Entry-3-3-2</span> 
       <div class="branch lv4"> 
       <div class="entry"><span class="label">Entry-3-3-2-1</span></div> 
       <div class="entry"><span class="label">Entry-3-3-2-2</span></div> 
       </div> 
      </div> 
      <div class="entry"><span class="label">Entry-3-3-3</span></div> 
      </div> 
     </div> 
     <div class="entry"><span class="label">Entry-3-4</span></div> 
     </div> 
    </div> 
    <div class="entry"><span class="label">Entry-4</span></div> 
    <div class="entry"><span class="label">Entry-5</span></div> 
    </div> 
</div> 
</div> 

SalesMember.java Datei

import java.util.List; 
import java.util.Set; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinTable; 
import javax.persistence.OneToMany; 
import javax.persistence.OneToOne; 
import javax.persistence.Table; 

@Entity 
@Table(name = "salesmember") 
public class SalesMember { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    private long id; 

    @Column(name = "name") 
    private String name; 

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name = "parent") 
    private SalesMember parent; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinTable(name = "children", joinColumns = @JoinColumn(name = "memberId"), inverseJoinColumns = @JoinColumn(name = "childId")) 
    private List<SalesMember> children; 

    public SalesMember() { 
     // TODO Auto-generated constructor stub 
    } 



    public SalesMember(String name) { 
     super(); 
     this.name = name; 
    } 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public SalesMember getParent() { 
     return parent; 
    } 

    public void setParent(SalesMember parent) { 
     this.parent = parent; 
    } 

    public List<SalesMember> getChildren() { 
     return children; 
    } 

    public void setChildren(List<SalesMember> children) { 
     this.children = children; 
    } 

} 

Könnte Sie fügen bitte Logik hinzu, um es anzusehen.

auch SaleMember Objekt für Ihre Referenz

public ModelAndView getRootElement(){ 
     SalesMember root = new SalesMember("Root"); 
     SalesMember entity1 = new SalesMember("Entity-1"); 
     SalesMember entity2 = new SalesMember("Entity-2"); 
     SalesMember entity3 = new SalesMember("Entity-3"); 
     SalesMember entity4 = new SalesMember("Entity-4"); 
     SalesMember entity5 = new SalesMember("Entity-5"); 


     SalesMember entity1_1 = new SalesMember("Entity-1-1"); 
     SalesMember entity1_1_1 = new SalesMember("Entity-1-1-1"); 
     List<SalesMember> entity1_1_Children=new ArrayList<>(); 
     entity1_1_Children.add(entity1_1_1); 
     entity1_1.setChildren(getChildrenList(entity1_1_Children,entity1_1)); 



     SalesMember entity1_2 = new SalesMember("Entity-1-2"); 
     SalesMember entity1_2_1 = new SalesMember("Entity-1-2-1"); 
     List<SalesMember> entity1_2_Children=new ArrayList<>(); 
     entity1_2_Children.add(entity1_2_1); 
     entity1_2.setChildren(getChildrenList(entity1_2_Children,entity1_2)); 

     SalesMember entity1_3 = new SalesMember("Entity-1-3"); 
     SalesMember entity1_3_1 = new SalesMember("Entity-1-3-1"); 
     List<SalesMember> entity1_3_Children=new ArrayList<>(); 
     entity1_3_Children.add(entity1_3_1); 
     entity1_3.setChildren(getChildrenList(entity1_3_Children,entity1_3)); 


     List<SalesMember> entity1_Children=new ArrayList<>(); 
     entity1_Children.add(entity1_1); 
     entity1_Children.add(entity1_2); 
     entity1_Children.add(entity1_3); 

     entity1.setChildren(getChildrenList(entity1_Children,entity1)); 




     SalesMember entity3_1 = new SalesMember("Entity-3-1"); 
     SalesMember entity3_2 = new SalesMember("Entity-3-2"); 
     SalesMember entity3_3 = new SalesMember("Entity-3-3"); 
     SalesMember entity3_4 = new SalesMember("Entity-3-4"); 


     SalesMember entity3_3_1 = new SalesMember("Entity-3-3-1"); 
     SalesMember entity3_3_2 = new SalesMember("Entity-3-3-2"); 
     SalesMember entity3_3_3 = new SalesMember("Entity-3-3-3"); 



     SalesMember entity3_3_2_1 = new SalesMember("Entity-3-3-2-1"); 
     SalesMember entity3_3_2_2 = new SalesMember("Entity-3-3-2-2"); 
     List<SalesMember> entity3_3_2_Children=new ArrayList<>(); 
     entity3_3_2_Children.add(entity3_3_2_1); 
     entity3_3_2_Children.add(entity3_3_2_2); 
     entity3_3_2.setChildren(getChildrenList(entity3_3_2_Children,entity3_3_2)); 


     List<SalesMember> entity3_3_Children=new ArrayList<>(); 
     entity3_3_Children.add(entity3_3_1); 
     entity3_3_Children.add(entity3_3_2); 
     entity3_3_Children.add(entity3_3_3); 
     entity3_3.setChildren(getChildrenList(entity3_3_Children,entity3_3)); 

     List<SalesMember> entity3_Children=new ArrayList<>(); 
     entity3_Children.add(entity3_1); 
     entity3_Children.add(entity3_2); 
     entity3_Children.add(entity3_3); 
     entity3_Children.add(entity3_4); 


     entity3.setChildren(getChildrenList(entity3_Children,entity3)); 


     List<SalesMember> root_Children=new ArrayList<>(); 
     root_Children.add(entity1); 
     root_Children.add(entity2); 
     root_Children.add(entity3); 
     root_Children.add(entity4); 
     root_Children.add(entity5); 
     root.setChildren(getChildrenList(root_Children,root)); 

     ModelAndView mav=new ModelAndView("salespoint"); 
     mav.addObject("root", root); 

     return mav; 
    } 


    private List<SalesMember> getChildrenList(List<SalesMember> chilrenList,SalesMember salesMember){ 
     for(SalesMember s:chilrenList){ 
      s.setParent(salesMember); 
     } 

     return chilrenList; 
    } 

Antwort

0

schließlich durch eigene gelöst i bin Entsendung.

if(children!=null && !children.isEmpty()){ 
    for(int i=0;i<children.size();i++){ 
     displaySaleMember(out,children.get(i),n); 
    } 
} 

System.out.println("</div></div>"); 
out.println("</div></div>"); 

Um

for(int i=0;i<children.size();i++){ 
    displaySaleMember(out,children.get(i),n); 
    if(children.get(i).getChildren()!=null){ 
     System.out.println("</div></div>"); 
     out.println("</div></div>"); 
    } 
} 

und setzen diesen Code in anderen Block nach Debuggen i

von

unten Code aktualisiert.