TabView的数据表与正确的方法问题

问题描述:

我使用Wildfly 9.0.1与PF 5.2和2.2 JSF。 我需要用子表填充数据表,它显示特定于每个我正在迭代的选项卡的标题和行。 下面的 “模型树” 是想显示:TabView的数据表与正确的方法问题

- >标签(MODULENAME)

- > - >头

- > - > - >行

XHTML:

<p:tabView id ="tabView1" value="#{moduleBean.modules}" var="tabItem"> 
    <p:tab title="#{tabItem.moduleName}" > 
    <p:dataTable id="mainTable" value="#{subTableView.getAllHeaders(tabItem.moduleName)}" var="head" > 
     <p:subTable id="subTable1" value="#{head.rows}" var="row"> 

我应该使用@PostConstruct为这类昂贵的操作,但JSF DOE的init()初始化方法不允许在没有虚空的情况下使用init()。 因此,我调用一个“懒法” getAllHeaders(String)但它并没有通过tabItem.moduleName标签迭代过程中改变字符串。

在标签中的任何方法正确遍历,标题和行生成地图,例如一个列表。

奇怪而我需要这个方法被调用的被生成的选项卡相同的时间量,这种方法被称为仅一次或两次,而不是例如三次。

但是如果我去没有如果statment(不要偷懒)在getAllHeaders(String)方法的豆我有正确的树显示与标签与标题和行 但在标签中的任何方法不是通过页眉迭代和行产生一个例如地图列表。

豆:

@PostConstruct 
public void init() {  
    this.modules = publicService.getAllModules(); 
} 

// Lazy method 
public List<Header> getAllHeaders(String module) { 

    if (this.headers == null) { 
     this.headers = publicService.getAllHeaders(module); 
    } 

    return this.headers;  
} 


public List<Header> getHeaders() { 
    return headers; 
} 

服务:

public List<Header> getAllHeaders(String module) { 

     List<Module> modules = entityManager.createQuery("select m from Module m",Module.class).getResultList();  

     List<Header> headers = new ArrayList<Header>(); 

     for (Module m : modules){ 

      if (m.getModuleName().equals(module)){ 

        for(Header h : m.getHeaders()) 
        { 

         headers.add(h); 

         for(Row q : h.getRows()) 
         { 

         } 
        } 
       } 
      } 

     return headers; 
    } 

作为参考我用下面Why JSF calls getters multiple times

谢谢你的时间。

+0

@BalusC,谢谢。我仍在挣扎。我正在做... – LEK

的解决方案正是阿里·萨利赫在以下提到的:​​3210

的解决方案是<h:form>标签的定位以围绕数据表。