使用 JSF2 Primefaces 6 清空数据表单元格
Empty Datatable cells using JSF2 Primefaces 6
我有一个应用程序从支持 bean 加载数据table。 SubAreas 数据table 加载了正确的行数,但是它们在图像上是空的。调试后,我可以看到支持 bean 上的 listaArea 属性(负责填充 table)正在从数据库中获取正确的数据。 区域是实体。
同一屏幕上的另一个数据table,名为 Membros 可以正常工作。
AREA.XHTML
<div>
<fieldset style="display:#{(areaMB.state == 'update')?'block':'none'}">
<p:dataTable var="teste" id="dtTeste" value="#{areaMB.listaArea}"
widgetVar="dtArea" paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="20, 50, 100"
rows="20" rowKey="#{area.idArea}"
emptyMessage="Nenhum registro" paginatorPosition="bottom">
<p:column headerText="#" width="10%">
<h:outputText value="#{area.idArea}" />
</p:column>
<p:column headerText="Descrição" width="40%"
filterBy="#{area.descricao}"
filterMatchMode="contains">
<h:outputText value="#{area.descricao}" />
</p:column>
<p:column headerText="Sigla" width="20%">
<h:outputText value="#{area.sigla}" />
</p:column>
<p:column headerText="Ativo" width="20%">
<h:outputText value="ATIVO" rendered="#{area.flgAtivo==1}" />
<h:outputText value="INATIVO" rendered="#{area.flgAtivo==0}" />
</p:column>
<p:column headerText="" width="10%" style="text-align:center">
<p:commandButton action="#{areaMB.preparaAlterar}"
update=":formu"
icon="fa fa-pencil" style="margin-right:10px"
title="Alterar"
styleClass="btn btn-default btn-xs">
<f:setPropertyActionListener target="#{areaMB.area}" value="#{area}" />
</p:commandButton>
</p:column>
</p:dataTable>
</fieldset>
</div>
</h:panelGroup>
托管 BEAN
@Named
@ViewScoped
public class AreaMB implements Serializable {
private String state = "search";
private String descricao;
private Area area = new Area();
private Area subArea = new Area();
private Usuario usuario = new Usuario();
private AreaUsuario areaUsuario = new AreaUsuario();
private List<Usuario> listaUsuario;
private List<Area> listaArea;
private List<AreaUsuario> listaAreaUsuario;
private List<SelectItem> listaMembro;
private List<Area> listaSubAreas;
private List<TipoArea> listaTipoArea;
private List<Area> listaAreaVinculada;
@PostConstruct
public void init() throws Exception {
pesquisar();
}
public void pesquisar() {
try {
listaArea = AreaService.getInstancia().pesquisar(area, 0, 0);
listaTipoArea = TipoAreaService.getInstancia().getAll();
//a area vinculada nao pode ser ela mesma
listaAreaVinculada = AreaService.getInstancia().getAll();
if (listaAreaVinculada.contains(area)) {
listaAreaVinculada.remove(area);
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void preparaAlterar() {
try {
state = "update";
AreaUsuario au = new AreaUsuario();
au.setIdArea(area.getIdArea());
listaAreaUsuario = AreaUsuarioService.getInstancia().pesquisar(au, AreaUsuarioService.JOIN_USUARIO, 0);
listaMembro = new ArrayList<SelectItem>();
for (AreaUsuario aUsuario : listaAreaUsuario) {
listaMembro.add(new SelectItem(aUsuario.getIdUsuario(), aUsuario.getUsuario().getNome()));
}
listaAreaVinculada.remove(area);
listaSubAreas = AreaService.getInstancia().getSubAreas(area);
} catch (Exception e) {
System.out.println(e.getStackTrace());
}
}
为什么会出现空单元格?
您的 dateTable 的 var 称为 teste (var="teste"
),而在 values 中使用并在您的 h:outputText
中呈现的 var 是 area
。
您可以更改为var="area"
,或者将h:outputText
的所有值和渲染更改为"#{teste.XXX}"
我有一个应用程序从支持 bean 加载数据table。 SubAreas 数据table 加载了正确的行数,但是它们在图像上是空的。调试后,我可以看到支持 bean 上的 listaArea 属性(负责填充 table)正在从数据库中获取正确的数据。 区域是实体。
同一屏幕上的另一个数据table,名为 Membros 可以正常工作。
AREA.XHTML
<div>
<fieldset style="display:#{(areaMB.state == 'update')?'block':'none'}">
<p:dataTable var="teste" id="dtTeste" value="#{areaMB.listaArea}"
widgetVar="dtArea" paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="20, 50, 100"
rows="20" rowKey="#{area.idArea}"
emptyMessage="Nenhum registro" paginatorPosition="bottom">
<p:column headerText="#" width="10%">
<h:outputText value="#{area.idArea}" />
</p:column>
<p:column headerText="Descrição" width="40%"
filterBy="#{area.descricao}"
filterMatchMode="contains">
<h:outputText value="#{area.descricao}" />
</p:column>
<p:column headerText="Sigla" width="20%">
<h:outputText value="#{area.sigla}" />
</p:column>
<p:column headerText="Ativo" width="20%">
<h:outputText value="ATIVO" rendered="#{area.flgAtivo==1}" />
<h:outputText value="INATIVO" rendered="#{area.flgAtivo==0}" />
</p:column>
<p:column headerText="" width="10%" style="text-align:center">
<p:commandButton action="#{areaMB.preparaAlterar}"
update=":formu"
icon="fa fa-pencil" style="margin-right:10px"
title="Alterar"
styleClass="btn btn-default btn-xs">
<f:setPropertyActionListener target="#{areaMB.area}" value="#{area}" />
</p:commandButton>
</p:column>
</p:dataTable>
</fieldset>
</div>
</h:panelGroup>
托管 BEAN
@Named
@ViewScoped
public class AreaMB implements Serializable {
private String state = "search";
private String descricao;
private Area area = new Area();
private Area subArea = new Area();
private Usuario usuario = new Usuario();
private AreaUsuario areaUsuario = new AreaUsuario();
private List<Usuario> listaUsuario;
private List<Area> listaArea;
private List<AreaUsuario> listaAreaUsuario;
private List<SelectItem> listaMembro;
private List<Area> listaSubAreas;
private List<TipoArea> listaTipoArea;
private List<Area> listaAreaVinculada;
@PostConstruct
public void init() throws Exception {
pesquisar();
}
public void pesquisar() {
try {
listaArea = AreaService.getInstancia().pesquisar(area, 0, 0);
listaTipoArea = TipoAreaService.getInstancia().getAll();
//a area vinculada nao pode ser ela mesma
listaAreaVinculada = AreaService.getInstancia().getAll();
if (listaAreaVinculada.contains(area)) {
listaAreaVinculada.remove(area);
}
} catch (Exception e) {
// TODO: handle exception
}
}
public void preparaAlterar() {
try {
state = "update";
AreaUsuario au = new AreaUsuario();
au.setIdArea(area.getIdArea());
listaAreaUsuario = AreaUsuarioService.getInstancia().pesquisar(au, AreaUsuarioService.JOIN_USUARIO, 0);
listaMembro = new ArrayList<SelectItem>();
for (AreaUsuario aUsuario : listaAreaUsuario) {
listaMembro.add(new SelectItem(aUsuario.getIdUsuario(), aUsuario.getUsuario().getNome()));
}
listaAreaVinculada.remove(area);
listaSubAreas = AreaService.getInstancia().getSubAreas(area);
} catch (Exception e) {
System.out.println(e.getStackTrace());
}
}
为什么会出现空单元格?
您的 dateTable 的 var 称为 teste (var="teste"
),而在 values 中使用并在您的 h:outputText
中呈现的 var 是 area
。
您可以更改为var="area"
,或者将h:outputText
的所有值和渲染更改为"#{teste.XXX}"