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。
谢谢你的时间。
答
的解决方案正是阿里·萨利赫在以下提到的:3210
的解决方案是<h:form>
标签的定位以围绕数据表。
@BalusC,谢谢。我仍在挣扎。我正在做... – LEK