1

我对 JSF 有疑问。

我用 JSF 和 primefaces 的 dataTable 创建了一个页面,但我意识到当我在 datatable 中使用 var 时,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;    
4

2 回答 2

2

这个问题你可以多理解一点:

为什么 JSF 多次调用 getter

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

干杯。

于 2013-08-21T17:38:08.147 回答
0

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

如果它没有范围(或错误的范围),则每次访问时都会重建 bean #usuarioBean.listaUsuario- 在您的示例中每次迭代都会发生 4 次。

为避免这种情况,请 make it @RequestScoped,使其与当前请求一样长。

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

于 2013-08-21T17:21:05.293 回答