Item Menu does not highlighted

Forum rules
Please note that response time for technical support is within 3-5 business days.
Post Reply
lbordinhon
Posts: 10
Joined: 03 Feb 2023, 14:41

14 Mar 2023, 14:13

Hi Guys,
My menu does not highlight the item when i click. I can navigate normal just does not highlight the menu i'm.
I need to do something?

olgubasak
Posts: 98
Joined: 05 Jan 2023, 11:05

14 Mar 2023, 16:12

Hi,

Can you send me the relevant code so I can check it?

lbordinhon
Posts: 10
Joined: 03 Feb 2023, 14:41

14 Mar 2023, 19:17

olgubasak wrote:
14 Mar 2023, 16:12
Hi,

Can you send me the relevant code so I can check it?
Hi, here it is.

menu.xhtml:

Code: Select all

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:pa="http://primefaces.org/barcelona">
    
    <div class="layout-sidebar">
        <pa:tabMenu>
            <pa:tab icon="pi pi-fw pi-microsoft" title="Gerenciamento">
                <h:form id="menu-form">
                    <pa:menu widgetVar="barcelonaMenuWidget" model="#{menuController.menuModel}" />
                </h:form>
            </pa:tab>
            
            <pa:tab icon="pi pi-fw pi-inbox" title="Inbox">
                <div class="inbox-tab">
                    <ul>
                        <li class="clearfix">
                            <p:graphicImage name="images/avatar1.png" library="barcelona-layout" width="45"/>
                            <span class="name">Joshua Williams</span>
                            <span class="message">Reports attached</span>
                        </li>
                        <li class="clearfix">
                            <p:graphicImage name="images/avatar1.png" library="barcelona-layout" width="45"/>
                            <span class="name">Joshua Williams</span>
                            <span class="message">About the meeting</span>
                        </li>
                        <li class="clearfix">
                            <p:graphicImage name="images/avatar2.png" library="barcelona-layout" width="45"/>
                            <span class="name">Emily Clark</span>
                            <span class="message">TODO Update</span>
                        </li>
                        <li class="clearfix">
                            <p:graphicImage name="images/avatar3.png" library="barcelona-layout" width="45"/>
                            <span class="name">Tim Johnson</span>
                            <span class="message">Expense Reports</span>
                        </li>
                        <li class="clearfix">
                            <p:graphicImage name="images/avatar4.png" library="barcelona-layout" width="45"/>
                            <span class="name">David Stark</span>
                            <span class="message">Rating Reviews</span>
                        </li>
                    </ul>
                    
                    <div class="inbox-labels">
                        <span>Labels</span>
                        <ul>
                            <li class="clearfix">
                                <span class="inbox-label">Work</span>
                                <span class="inbox-label-badge">4</span>
                            </li>
                            <li class="clearfix">
                                <span class="inbox-label">Personel</span>
                                <span class="inbox-label-badge">2</span>
                            </li>
                            <li class="clearfix">
                                <span class="inbox-label">Shared</span>
                                <span class="inbox-label-badge">3</span>
                            </li>
                            <li class="clearfix">
                                <span class="inbox-label">General</span>
                                <span class="inbox-label-badge">5</span>
                            </li>
                        </ul>
                    </div>
                </div>
            </pa:tab>
            
            <pa:tab icon="pi pi-fw pi-calendar" title="Calendar">
                <div class="calendar-tab">
                    <ul>
                        <li class="clearfix">
                            <div class="calendar-event-date">
                                <span>21</span>
                                <span>OCT</span>
                            </div>
                            <div class="calendar-event-detail">
                                <span class="calendar-event-title">Project Meeting</span>
                                    <i class="pi pi-map-marker"></i>
                                <span class="calendar-event-location">Chicago</span>
                            </div>
                        </li>
                        <li class="clearfix">
                            <div class="calendar-event-date">
                                <span>13</span>
                                <span>NOV</span>
                            </div>
                            <div class="calendar-event-detail">
                                <span class="calendar-event-title">Presentation 1</span>
                                    <i class="pi pi-map-marker"></i>
                                <span class="calendar-event-location">New York</span>
                            </div>
                        </li>
                        <li class="clearfix">
                            <div class="calendar-event-date">
                                <span>01</span>
                                <span>DEC</span>
                            </div>
                            <div class="calendar-event-detail">
                                <span class="calendar-event-title">Presentation 2</span>
                                    <i class="pi pi-map-marker"></i>
                                <span class="calendar-event-location">New York</span>
                            </div>
                        </li>
                        <li class="clearfix">
                            <div class="calendar-event-date">
                                <span>25</span>
                                <span>DEC</span>
                            </div>
                            <div class="calendar-event-detail">
                                <span class="calendar-event-title">New Year Party</span>
                                    <i class="pi pi-map-marker"></i>
                                <span class="calendar-event-location">San Francisco</span>
                            </div>
                        </li>
                    </ul>
                </div>
            </pa:tab>
            
             <pa:tab icon="pi pi-fw pi-chart-bar" title="Projects">
                 <div class="projects-tab">
                    <ul>
                      <li class="clearfix">
                                <i class="pi pi-sliders-h"></i>
                                <span class="project-title">Current Tasks</span>
                          <span>3 open, 4 closed</span>
                          <div class="project-progressbar">
                              <div class="project-progressbar-value" style="width: 50%"></div>
                          </div>
                      </li>
                      <li class="clearfix">
                          <i class="fa fa-youtube"></i>
                          <span class="project-title">YouTube Videos</span>
                          <span>12 new, 2 subscribers</span>
                          <div class="project-progressbar">
                              <div class="project-progressbar-value" style="width: 20%"></div>
                          </div>
                      </li>
                      <li class="clearfix">
                                <i class="pi pi-comment"></i>
                                <span class="project-title">Unread Posts</span>
                          <span>24 new messages</span>
                          <div class="project-progressbar">
                              <div class="project-progressbar-value" style="width: 65%"></div>
                          </div>
                      </li>
                      <li class="clearfix">
                                <i class="pi pi-heart"></i>
                                <span class="project-title">Favorite Contacts</span>
                                <span>8 total, 4 approved</span>
                          <div class="project-progressbar">
                              <div class="project-progressbar-value" style="width: 80%"></div>
                          </div>
                      </li>
                      <li class="clearfix">
                                <i class="pi pi-lock"></i>
                                <span class="project-title">Verified Users</span>
                          <span>90 total, 45 pending</span>
                          <div class="project-progressbar">
                              <div class="project-progressbar-value" style="width: 90%"></div>
                          </div>
                      </li>
                    </ul>
                 </div>
            </pa:tab>
            
             <pa:tab icon="pi pi-fw pi-user" title="Team">
                <div class="team-tab">
                    <ul>
                        <li class="clearfix">
                           <p:graphicImage name="images/avatar1.png" library="barcelona-layout" width="45"/>
                           <span class="name">Joshua Williams</span>
                           <span class="location">New York, USA</span>
                        </li>
                        <li class="clearfix">
                           <p:graphicImage name="images/avatar2.png" library="barcelona-layout" width="45"/>
                           <span class="name">Jennifer Clarkson</span>
                           <span class="location">Paris, France</span>
                        </li>
                        <li class="clearfix">
                           <p:graphicImage name="images/avatar3.png" library="barcelona-layout" width="45"/>
                           <span class="name">Tim Johnson</span>
                           <span class="location">London, United Kingdom</span>
                        </li>
                        <li class="clearfix">
                           <p:graphicImage name="images/avatar4.png" library="barcelona-layout" width="45"/>
                           <span class="name">David Stark</span>
                           <span class="location">San Francisco, USA</span>
                        </li>
                    </ul>
                </div>
            </pa:tab>
        </pa:tabMenu>        
    </div>
    
</ui:composition>
MenuController:

Code: Select all

package br.com.rubytech.mystock.web.controller.sistema;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;

import org.primefaces.model.menu.BaseMenuModel;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.DefaultSubMenu.Builder;
import org.primefaces.model.menu.MenuModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.web.context.WebApplicationContext;

import br.com.rubytech.mystock.persistence.dao.seguranca.CargoPermissaoDaoImpl;
import br.com.rubytech.mystock.persistence.dao.seguranca.UsuarioDaoImpl;
import br.com.rubytech.mystock.persistence.entidade.seguranca.Usuario;
import br.com.rubytech.mystock.persistence.entidade.seguranca.UsuarioPermissao;
import br.com.rubytech.mystock.persistence.entidade.seguranca.UsuarioSubPermissao;
import br.com.rubytech.mystock.seguranca.SystemConfig;
import br.com.rubytech.mystock.service.impl.SegurancaServiceImpl;
import br.com.rubytech.mystock.web.controller.SystemController;
import br.com.rubytech.mystock.web.exception.SessionException;
import br.com.rubytech.mystock.web.menu.MenuItem;
import br.com.rubytech.mystock.web.menu.SubAcesso;
import br.com.rubytech.mystock.web.menu.SubMenu;

@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
@Controller("menuController")
public class MenuController extends SystemController {

	private static final long serialVersionUID = 1L;

	@Autowired
	private CargoPermissaoDaoImpl cargoPermissaoDaoImpl;
	
	@Autowired
	private SegurancaServiceImpl segurancaServiceImpl;

	@Autowired
	private UsuarioDaoImpl usuarioDaoImpl;
	
	private List<UsuarioPermissao> usuarioPermissaoLista;
	
	private List<UsuarioSubPermissao> usuarioSubPermissaoLista;

	private MenuModel menuModel;
	
	private String novaSenha;
	
	private String novaSenhaRepetida;
	
	private Authentication autenticacao = SecurityContextHolder.getContext().getAuthentication();
	private Usuario usuario = (Usuario) autenticacao.getPrincipal();
	
	@Override
	@PostConstruct
	public void init() {
		try {
			updateMenu();
		} catch (SessionException e) {
			e.printStackTrace();
		}
	}
	
	private boolean verificarAcesso(MenuItem menuItem) {
		boolean temAcesso = false;
		usuarioPermissaoLista = segurancaServiceImpl.procurarListaAcessosUsuario(usuario);
		
		for (UsuarioPermissao usuarioPermissao : usuarioPermissaoLista) {
			if (menuItem.getAcesso().equals(usuarioPermissao.getAcesso()) || verificarSubAcesso(menuItem, usuarioPermissao)) {
				temAcesso = true;
			}
		}
		
		return temAcesso;
	}
	
	private boolean verificarSubAcesso(MenuItem menuItem, UsuarioPermissao usuarioPermissao) {
		boolean temAcesso = false;
		usuarioSubPermissaoLista = segurancaServiceImpl.procurarListaSubAcessosUsuario(usuarioPermissao);
		for (UsuarioSubPermissao usuarioSubPermissao : usuarioSubPermissaoLista) {
			if (menuItem.getAcesso().equals(usuarioSubPermissao.getSubAcesso().getAcesso())) {
				temAcesso = true;
			}
		}
		
		return temAcesso;
	}
	
	private void updateMenu() throws SessionException {
		
		if (menuModel == null) {
			menuModel = new BaseMenuModel();
			
			for (SubMenu subMenu : SubMenu.values()) {
				if (subMenu.getMenuPai() == null) {
					Builder builder = DefaultSubMenu.builder();

					if (subMenu.getIcon() != null) {
						builder.icon(subMenu.getIcon());
					}

					List<DefaultSubMenu> subMenuList = includeSubMenu(subMenu);
					if (subMenuList.size() > 0) {
						for (DefaultSubMenu defaultSubMenuChildren : subMenuList) {
							builder.addElement(defaultSubMenuChildren);
						}
					}

					List<DefaultMenuItem> menuItemList = includeMenuItem(subMenu);
					if (menuItemList.size() > 0) {
						for (DefaultMenuItem menuItem : menuItemList) {
							builder.addElement(menuItem);
						}
					}

					DefaultSubMenu defaultSubMenu = builder.label(subMenu.getDescricao()).build();

					if (subMenu.getMenuPai() == null && menuItemList.size() > 0) {
						menuModel.getElements().add(defaultSubMenu);
					}
				}
			}
			
		}
		
	}
	
	private List<DefaultSubMenu> includeSubMenu(SubMenu menu) throws SessionException {

		List<DefaultSubMenu> subMenuList = new ArrayList<DefaultSubMenu>();
		
		for (SubMenu subMenu : SubMenu.values()) {
			if(menu.equals(subMenu.getMenuPai())) {
				Builder builder = DefaultSubMenu.builder();
				
				if (subMenu.getIcon() != null) {
					builder.icon(subMenu.getIcon());
				}
				
				List<DefaultSubMenu> subMenuListN2 = includeSubMenu(subMenu);
				if (subMenuListN2.size() > 0) {
					for (DefaultSubMenu defaultSubMenuChildren : subMenuListN2) {
						builder.addElement(defaultSubMenuChildren);
					}
				}
				
				List<DefaultMenuItem> menuItemList = includeMenuItem(subMenu);
				if (menuItemList.size() > 0) {
					for (DefaultMenuItem itemMenu : menuItemList) {
						builder.addElement(itemMenu);
					}
				}
				DefaultSubMenu defaultSubMenu = builder.label(subMenu.getDescricao()).build();

//				if (subMenuListN2.size() > 0 || subMenuList.size() > 0) {
					subMenuList.add(defaultSubMenu);
//				}
			}
		}
		
		return subMenuList;
	}
	
	private List<DefaultMenuItem> includeMenuItem(SubMenu subMenu) throws SessionException {
		List<DefaultMenuItem> menuItemList = new ArrayList<DefaultMenuItem>();

		for (MenuItem menuItem : MenuItem.values()) {
			if (subMenu.equals(menuItem.getSubMenu()) && verificarAcesso(menuItem)) {
				if (menuItem.getUrl() != null) {
						org.primefaces.model.menu.DefaultMenuItem.Builder menuItemBuilder = DefaultMenuItem.builder()
								.value(menuItem.getDescricao()).url(SystemConfig.SYSTEM_CONTEXT_PATH + menuItem.getUrl());
						if (menuItem.getIcon() != null) {
							menuItemBuilder.icon(menuItem.getIcon());
						}
						DefaultMenuItem defaultMenuItem = menuItemBuilder.build();
						menuItemList.add(defaultMenuItem);
				}
			}
		}

		return menuItemList;
	}
	
	public void alterarSenha() throws IOException {
	if (novaSenha.equals(novaSenhaRepetida)) {
		segurancaServiceImpl.alterarSenha(usuario, novaSenha);
		infoMessage("Senha atualizada com sucesso!", "");
		String url = FacesContext.getCurrentInstance().getExternalContext().getApplicationContextPath();
		FacesContext.getCurrentInstance().getExternalContext().redirect(url + "/logout/");
	}
	
}
	
	/* Getters and Setters */

	public MenuModel getMenuModel() {
		return menuModel;
	}

	public void setMenuModel(MenuModel menuModel) {
		this.menuModel = menuModel;
	}

	public CargoPermissaoDaoImpl getCargoPermissaoDaoImpl() {
		return cargoPermissaoDaoImpl;
	}

	public void setCargoPermissaoDaoImpl(CargoPermissaoDaoImpl cargoPermissaoDaoImpl) {
		this.cargoPermissaoDaoImpl = cargoPermissaoDaoImpl;
	}

	public SegurancaServiceImpl getSegurancaServiceImpl() {
		return segurancaServiceImpl;
	}

	public void setSegurancaServiceImpl(SegurancaServiceImpl segurancaServiceImpl) {
		this.segurancaServiceImpl = segurancaServiceImpl;
	}

	public UsuarioDaoImpl getUsuarioDaoImpl() {
		return usuarioDaoImpl;
	}

	public void setUsuarioDaoImpl(UsuarioDaoImpl usuarioDaoImpl) {
		this.usuarioDaoImpl = usuarioDaoImpl;
	}

	public String getNovaSenha() {
		return novaSenha;
	}

	public void setNovaSenha(String novaSenha) {
		this.novaSenha = novaSenha;
	}

	public String getNovaSenhaRepetida() {
		return novaSenhaRepetida;
	}

	public void setNovaSenhaRepetida(String novaSenhaRepetida) {
		this.novaSenhaRepetida = novaSenhaRepetida;
	}

	public Authentication getAutenticacao() {
		return autenticacao;
	}

	public void setAutenticacao(Authentication autenticacao) {
		this.autenticacao = autenticacao;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<UsuarioPermissao> getUsuarioPermissaoLista() {
		return usuarioPermissaoLista;
	}

	public void setUsuarioPermissaoLista(List<UsuarioPermissao> usuarioPermissaoLista) {
		this.usuarioPermissaoLista = usuarioPermissaoLista;
	}

	public List<UsuarioSubPermissao> getUsuarioSubPermissaoLista() {
		return usuarioSubPermissaoLista;
	}

	public void setUsuarioSubPermissaoLista(List<UsuarioSubPermissao> usuarioSubPermissaoLista) {
		this.usuarioSubPermissaoLista = usuarioSubPermissaoLista;
	}
}
I don't know if is necessary but i have added that classes, the code is called in debug but nothing happens.
Image

olgubasak
Posts: 98
Joined: 05 Jan 2023, 11:05

16 Mar 2023, 12:55

Hi again,

When i testing, it appears to work correctly. I recommend ensuring that your PrimeFaces and template versions are up-to-date.


If you encounter any problem do not hesitate to contact us.

lbordinhon
Posts: 10
Joined: 03 Feb 2023, 14:41

05 Apr 2023, 20:59

olgubasak wrote:
16 Mar 2023, 12:55
Hi again,

When i testing, it appears to work correctly. I recommend ensuring that your PrimeFaces and template versions are up-to-date.


If you encounter any problem do not hesitate to contact us.
I'm using the latest version. I still couldn't solve

olgubasak
Posts: 98
Joined: 05 Jan 2023, 11:05

10 Apr 2023, 10:53

Hi again,

I tried again and still didn't receive any errors.

Could you please add your code to the link provided below and send it to me?

https://github.com/primefaces/primefaces-test

lbordinhon
Posts: 10
Joined: 03 Feb 2023, 14:41

10 Apr 2023, 19:45

I sent the code (same code posted above).

olgubasak
Posts: 98
Joined: 05 Jan 2023, 11:05

10 Apr 2023, 20:39

Hi ,

Yes, I understand, but sending the file as requested would make it easier for me to understand your project because I am not encountering any errors.

lbordinhon
Posts: 10
Joined: 03 Feb 2023, 14:41

31 May 2023, 15:33

Hello again. I tested it with a static menu, just like the demo and it worked perfectly. When I put the dynamic menu with model, it doesn't work, the problem must be in the model. Any idea?

olgubasak
Posts: 98
Joined: 05 Jan 2023, 11:05

22 Jun 2023, 13:57

Hi,

Sorry for the late response. Could you please send me the relevant code so that I can better understand the problem?

Best Regards,

Post Reply

Return to “Barcelona - PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 4 guests