JSF重新加载相同的功能

时间:2013-08-21 17:14:24

标签: jsf

我遇到了JSF的问题。

我用JSF和primeTable的数据表创建了一个页面,但我意识到我使用var到datatable,JSF多次重新加载一个相同的get方法。 我不知道如果因为JSF或我的程序,有人可以帮助我吗?

 <p:dataTable var="Usuario" value="#{usuarioBean.listaUsuario}"
                             paginator="true" rows="10" selection="#{usuarioBean.usuario}"
                             rowKey="#{Usuario.id}"
                             id="dataTable"
                             paginatorPosition="bottom">
                    <p:column headerText="ID" style="width: 10px">
                        <h:outputText value="#{Usuario.id}"/>
                    </p:column>
                    <p:column headerText="Nome">
                        <h:outputText value="#{Usuario.nome}"/>
                    </p:column>
                    <p:column headerText="E-mail">
                        <h:outputText value="#{Usuario.email}"/>
                    </p:column>
                    <p:column headerText="Telefone" style="width: 10px">
                        <h:outputText value="#{Usuario.telefone}"/>
                    </p:column>

                    <p:column headerText="Editar" style="width: 10px;">
                        <p:commandLink  id="btnEditar" action="#{usuarioBean.ChamareditarUsuario()}" ajax="false" title="Editar">     
                            <h:graphicImage  value="/resources/img/editar.png" style="position: relative; top: 25%; left: 25%;" />     
                            <f:setPropertyActionListener value="#{Usuario}" target="#{usuarioBean.usuario}" /> 
                        </p:commandLink>
                    </p:column>

                    <p:column headerText="Excluir" style="width: 10px;">                                                 
                        <p:commandLink  id="btnDeletar" title="Deletar" action="#{usuarioBean.deletarUsuario()}" update="dataTable">     
                            <h:graphicImage  value="/resources/img/deletar.png" style="position: relative; top: 25%; left: 25%;"/>                                                
                            <f:setPropertyActionListener value="#{Usuario}" target="#{usuarioBean.usuario}" /> 
                        </p:commandLink>
                    </p:column>
                    <p:column  selectionMode="single" width="1%"/>
                </p:dataTable>




@ManagedBean
@RequestScoped
public class UsuarioBean {

private Usuario usuario = new Usuario();
private String campo;
private String valor;
private List<Usuario> listaUsuario;
private String acesso;
private List<Acesso> listaAcesso;    

2 个答案:

答案 0 :(得分:2)

你可以在这个问题上多了解一点:

Why JSF calls getters multiple times

基本上,getter被多次调用,是JSF生命周期的一部分。

干杯。

答案 1 :(得分:0)

显示你的usuarioBean - 它有什么范围?

如果它没有Scope(或者是错误的范围),那么每次访问#usuarioBean.listaUsuario时都会重建bean - 在你的例子中,每次迭代将发生4次。

为避免这种情况,请将其设为@RequestScoped,因此它与当前请求一样长。

Sidenode:h:datatable不是primefaces组件。导入正确的命名空间将为p:datatable