我有一个包含MemberSales对象列表的MemberSale类。我的要求是。我想基于对象创建jsp文件。
我从数据库获取SalesMember对象,并根据我需要在jsp中查看它的列表。为此,我使用自定义JSTL库。
我试过的代码是,但我没有得到预期的输出
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;
}
}
预期产量 :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
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;
}
}
请你加上逻辑来查看它。
我也发布了SaleMember对象供您参考
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;
}
答案 0 :(得分:0)
这
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>");
到
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>");
}
}
并将此代码放在else块中。