Jsf 2 带有复选框的primefaces数据表在标记时正在处理选择

Jsf 2 带有复选框的primefaces数据表在标记时正在处理选择,jsf-2,primefaces,Jsf 2,Primefaces,我有一个带有多个选择(复选框)的数据表。每次标记此复选框时,都会再次执行数据表的选择 XHTML: <p:dataTable id="dtUsuarios" widgetVar="usuarios" value="#{configGruposUsuariosMB.usuarios}" var="usuario" paginator="true" rows="10"

我有一个带有多个选择(复选框)的数据表。每次标记此复选框时,都会再次执行数据表的选择

XHTML:

<p:dataTable id="dtUsuarios"
                            widgetVar="usuarios" value="#{configGruposUsuariosMB.usuarios}"
                            var="usuario" paginator="true" rows="10"
                            paginatorPosition="bottom" scrollable="true" scrollHeight="82%"
                            rowsPerPageTemplate="5,10,15,30,50,100"
                            paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                            emptyMessage="#{i18n.datatableVazia}" lazy="true"
                            currentPageReportTemplate="{currentPage}/{totalPages} #{i18n.paginas} - {startRecord} #{i18n.a} {endRecord} #{i18n.de} {totalRecords}"
                            filteredValue="#{configGruposUsuariosMB.usuarioFiltered}"
                            resizableColumns="true" rowIndexVar="rowIx"
                            selection="#{configGruposUsuariosMB.usuariosSelecionados}"
                            rowKey="#{usuario.id}" style="float: right; width: 99%; overflow: hidden;" >

                            <p:ajax event="rowSelectCheckbox" />
                            <p:ajax event="rowUnselectCheckbox"/>

                            <f:facet name="header">
                                <p:outputLabel value="#{i18n.usuarios}" style="float: left;" />
                            </f:facet>

                            <f:facet name="header">
                                <p:outputPanel>
                                    <h:outputText value="#{i18n.pesquisaGlobal}:" />
                                    <p:inputText id="globalFilter" onkeyup="usuarios.filter()"
                                        style="width:70px" />
                                    <p:watermark value="#{i18n.filtroGlobal}" for="globalFilter" />
                                </p:outputPanel>
                            </f:facet>

                            <p:column id="cbx" selectionMode="multiple" style="width:17px" />

                            <p:column id="nome" headerText="#{i18n.nomeCompleto}"
                                sortBy="#{usuario.nome}" style="width:35%;">
                                <h:outputText value="#{usuario.nome}" />
                            </p:column>

                            <p:column id="email" headerText="#{i18n.email}"
                                sortBy="#{usuario.email}" style="width:35%;">
                                <h:outputText value="#{usuario.email}" />
                            </p:column>

                            <p:column id="grupoAtual" headerText="#{i18n.grupoAtual}"
                                sortBy="#{usuario.grupoUsuario.descricao}" style="width:30%;">
                                <h:outputText value="#{usuario.grupoUsuario.descricao}" />
                            </p:column>

                        </p:dataTable>

MB(@ViewScoped):

@ManagedBean(name=“configGruposUsuariosMB”)
@视域
公共类ConfigGruPosuarioSMB{
@EJB
私人GrupoUsuarioService GrupoUsuarioService;
@EJB
私人用益服务用益服务;
@注入
私有消息控制器消息;
私人Grupourio Grupourio Seleconado;
私人名单;
私人LazyDataModel usuarios;
私人LazyDataModel usuariosGrupo;
私人用益;
私人用膳用膳;
私人名单使用权;
私人名单,通常为Ruposelecionados;
私人ETipoUsuario Tipousuarioseleconado;
//巴斯卡宫殿国际基地酒店
ResourceBundle i18n=ResourceBundle.getBundle(“br.com.sales.messages.msg”,
FacesContext.getCurrentInstance().getViewRoot().getLocale());
公共GrupoUsuario GetGrupousuarioseleconado(){
返回Grupousuarioseleconado;
}
公共无效设置Grupousuarioseleconado(GrupoUsuario Grupousuarioseleconado){
this.grupoUsuarioSelecionado=grupoUsuarioSelecionado;
}
公共列表getGruposUsuarios(){
返回gruposUsuarios;
}
public void setGruposUsuarios(列表gruposUsuarios){
this.gruposUsuarios=gruposUsuarios;
}
公共LazyDataModel getUsuarios(){
如果(通常==null){
usuarios=新的通用LazyDataModel(
usuarioService.findAll());
}
返还利息;
}
公共无效设置usuarios(LazyDataModel usuarios){
this.usuarios=usuarios;
}
公共教育{
if(tipousuarioseleconado==null)
Tipousuarioseleconado=ETipoUsuario.A;
if(gruposUsuarios==null | | gruposUsuarios.isEmpty())
carregarListaGrupos(Tipousuarioseleconado);
返回Tipousuarioseleconado;
}
公共无效设置(ETIPOUSUARIOSELECIONADO){
this.tipousuarioseleconado=tipousuarioseleconado;
carregarListaGrupos(Tipousuarioseleconado);
}
公共列表gettiposuarios(){
List tipos=new ArrayList();
for(ETipoUsuario tipoUsuario:ETipoUsuario.getAll()){
tipos.add(新选择项)(tipoUsuario,i18n.getString)(tipoUsuario
.getTipo());
}
返回tipos;
}
公共无效carregarListaGrupos(Etipourio tipo){
gruposUsuarios=Grupousuarios服务
.findByTipoUsuario(Tipousuarioseleconado);
Grupousuarioseleconado=getGrupoUsuarioPadrao();
}
公共GrupoUsuario getGrupoUsuarioPadrao(){
对于(GrupoUsuario grupo:Gruposusarios){
if(grupo.isPadrao())
返回grupo;
}
返回新的GrupoUsuario();
}
公共LazyDataModel getUsuariosGrupo(){
列表用户=用户服务
.findByGrupoUsuario((Grupousuarioseleconado!=null?Grupousuarioseleconado
:new GrupoUsuario());
USUARISGRUPO=新的通用LazyDataModel(用户);
返回USUARISGRUPO;
}
公共无效设置USUARISGRUPO(LazyDataModel USUARISGRUPO){
this.usuariosGrupo=usuariosGrupo;
}
public Usuario getUsuarioFiltered(){
回报率;
}
公共无效设置usuarioFiltered(Usuario usuarioFiltered){
this.usuarioFiltered=usuarioFiltered;
}
public Usuario getUsuarioGrupoFiltered(){
返回usuarioprofilter;
}
公共无效设置Usuario GrupoFiltered(Usuario Usuario GrupoFiltered){
this.usuariogrupfiltered=usuariogrupfiltered;
}
公共列表getUsuariosGrupoSelecionados(){
返回Usariosgruposelecionados;
}
公共无效设置usuariosgruposelecionados(
列表(通常为Ruposelecionados){
this.usuariosGrupoSelecionados=usuariosGrupoSelecionados;
}
公共列表getUsuariosselectionados(){
返回usualiselectionados;
}
公共无效设置Usuariosselectionados(列表Usuariosselectionados){
this.usuariosselectionados=usuariosselectionados;
}
公共无效重置(){
usuariosselectionados=null;
usuariosGrupoSelecionados=null;
usuarios=null;
getUsuarios();
usuariosGrupo=null;
getUsuariosGrupo();
}
公共无效Adicionarusarios(){
列表用户satuais=((GenericLazyDataModel)USUARISGRUPO)
.getDatasource();
for(Usuario用户:usuariosselectionados){
如果(!user.getGrupoUsuario().equals(grupoUsuarioSelecionado)){
user.setGrupoUsuario(grupoUsuarioSelecionado);
usersAtuais.add(用户);
}
}
//测试。。。
usuarioService.merge(usuariosselectionados);
//重置();
if(通常为selectionados!=null)
usuariosselectionados.clear();
如果(通常情况下)=
@ManagedBean(name = "configGruposUsuariosMB")
@ViewScoped
public class ConfigGruposUsuariosMB {

    @EJB
    private GrupoUsuarioService grupoUsuarioservice;
    @EJB
    private UsuarioService usuarioService;
    @Inject
    private MessagesController messages;

    private GrupoUsuario grupoUsuarioSelecionado;
    private List<GrupoUsuario> gruposUsuarios;
    private LazyDataModel<Usuario> usuarios;
    private LazyDataModel<Usuario> usuariosGrupo;
    private Usuario usuarioFiltered;
    private Usuario usuarioGrupoFiltered;
    private List<Usuario> usuariosSelecionados;
    private List<Usuario> usuariosGrupoSelecionados;
    private ETipoUsuario tipoUsuarioSelecionado;

    // Buscar palavras da base de internacionalização
    ResourceBundle i18n = ResourceBundle.getBundle("br.com.sales.messages.msg",
            FacesContext.getCurrentInstance().getViewRoot().getLocale());

    public GrupoUsuario getGrupoUsuarioSelecionado() {
        return grupoUsuarioSelecionado;
    }

    public void setGrupoUsuarioSelecionado(GrupoUsuario grupoUsuarioSelecionado) {
        this.grupoUsuarioSelecionado = grupoUsuarioSelecionado;
    }

    public List<GrupoUsuario> getGruposUsuarios() {
        return gruposUsuarios;
    }

    public void setGruposUsuarios(List<GrupoUsuario> gruposUsuarios) {
        this.gruposUsuarios = gruposUsuarios;
    }

    public LazyDataModel<Usuario> getUsuarios() {
        if (usuarios == null) {
            usuarios = new GenericLazyDataModel<Usuario>(
                    usuarioService.findAll());
        }

        return usuarios;
    }

    public void setUsuarios(LazyDataModel<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public ETipoUsuario getTipoUsuarioSelecionado() {
        if (tipoUsuarioSelecionado == null)
            tipoUsuarioSelecionado = ETipoUsuario.A;

        if (gruposUsuarios == null || gruposUsuarios.isEmpty())
            carregarListaGrupos(tipoUsuarioSelecionado);

        return tipoUsuarioSelecionado;
    }

    public void setTipoUsuarioSelecionado(ETipoUsuario tipoUsuarioSelecionado) {
        this.tipoUsuarioSelecionado = tipoUsuarioSelecionado;

        carregarListaGrupos(tipoUsuarioSelecionado);
    }

    public List<SelectItem> getTiposUsuarios() {
        List<SelectItem> tipos = new ArrayList<SelectItem>();

        for (ETipoUsuario tipoUsuario : ETipoUsuario.getAll()) {
            tipos.add(new SelectItem(tipoUsuario, i18n.getString(tipoUsuario
                    .getTipo())));
        }

        return tipos;
    }

    public void carregarListaGrupos(ETipoUsuario tipo) {
        gruposUsuarios = grupoUsuarioservice
                .findByTipoUsuario(tipoUsuarioSelecionado);

        grupoUsuarioSelecionado = getGrupoUsuarioPadrao();
    }

    public GrupoUsuario getGrupoUsuarioPadrao() {
        for (GrupoUsuario grupo : gruposUsuarios) {
            if (grupo.isPadrao())
                return grupo;
        }

        return new GrupoUsuario();
    }

    public LazyDataModel<Usuario> getUsuariosGrupo() {
        List<Usuario> users = usuarioService
                .findByGrupoUsuario((grupoUsuarioSelecionado != null ? grupoUsuarioSelecionado
                        : new GrupoUsuario()));

        usuariosGrupo = new GenericLazyDataModel<Usuario>(users);

        return usuariosGrupo;
    }

    public void setUsuariosGrupo(LazyDataModel<Usuario> usuariosGrupo) {
        this.usuariosGrupo = usuariosGrupo;
    }

    public Usuario getUsuarioFiltered() {
        return usuarioFiltered;
    }

    public void setUsuarioFiltered(Usuario usuarioFiltered) {
        this.usuarioFiltered = usuarioFiltered;
    }

    public Usuario getUsuarioGrupoFiltered() {
        return usuarioGrupoFiltered;
    }

    public void setUsuarioGrupoFiltered(Usuario usuarioGrupoFiltered) {
        this.usuarioGrupoFiltered = usuarioGrupoFiltered;
    }

    public List<Usuario> getUsuariosGrupoSelecionados() {
        return usuariosGrupoSelecionados;
    }

    public void setUsuariosGrupoSelecionados(
            List<Usuario> usuariosGrupoSelecionados) {
        this.usuariosGrupoSelecionados = usuariosGrupoSelecionados;
    }

    public List<Usuario> getUsuariosSelecionados() {
        return usuariosSelecionados;
    }

    public void setUsuariosSelecionados(List<Usuario> usuariosSelecionados) {
        this.usuariosSelecionados = usuariosSelecionados;
    }

    public void reset() {
        usuariosSelecionados = null;
        usuariosGrupoSelecionados = null;
        usuarios = null;
        getUsuarios();
        usuariosGrupo = null;
        getUsuariosGrupo();
    }

    public void adicionarUsuarios() {
        List<Usuario> usersAtuais = ((GenericLazyDataModel<Usuario>) usuariosGrupo)
                .getDatasource();

        for (Usuario user : usuariosSelecionados) {
            if (!user.getGrupoUsuario().equals(grupoUsuarioSelecionado)) {
                user.setGrupoUsuario(grupoUsuarioSelecionado);
                usersAtuais.add(user);
            }
        }

        // teste...
        usuarioService.merge(usuariosSelecionados);
        // reset();

        if (usuariosSelecionados != null)
            usuariosSelecionados.clear();
        if (usuariosGrupoSelecionados != null)
            usuariosGrupoSelecionados.clear();

        usuariosGrupo = null;
        usuariosGrupo = new GenericLazyDataModel<Usuario>(usersAtuais);

        messages.addInfo("msgSucessoParcial");
    }

    public void removerUsuarios() {
        boolean error = false;

        for (Usuario user : usuariosGrupoSelecionados) {
            if (user.getGrupoUsuario().equals(usuariosGrupoSelecionados)) {
                error = true;
                continue;
            } else {
                user.setGrupoUsuario(getGrupoUsuarioPadrao());
            }
        }

        reset();
        if (error)
            messages.addWarn("msgAvisoUsuarioGrupo");

        messages.addInfo("msgSucessoParcial");
    }

    public void save() {
        usuarioService.merge(usuariosSelecionados);
        messages.addInfo("msgSucesso");
    }

}