Ajuda com rich:panelMenu, Style do icon não funfa

15 respostas
Tchello

Bom dia galera!

Bom, fiz algumas pesquisas no google e aqui no GUJ mas ainda não encontrei o que estou precisando.
É o seguinte, tenho um rich:panelMenu com alguns <rich:panelGroup e <rich:panelMenuItem dentro.

Setei nos <rich:panelMenuItem os respectivos ícones que queria e ele os carregou perfeitamente com o style padrão, em 16x16.
Nessa mesma tag setei o IconStyle pra mudar esse valor padrão de altera e largura e não funcionou. Criei uma classe CSS e setei em iconClass e também não funcionou.

Segue o código:

...
<style type="text/css">
            .divMenu{
                width: 200px;
                float: left;
                margin: 0; padding: 0;
            }
            .iconX{
                width: 32px;
                height: 32px;
            }
        </style>

...
<div id="divMenu" class="divMenu">
                <rich:panelMenu mode="ajax" 
                                iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right"
                                iconCollapsedTopGroup="chevronDown">
                    <rich:panelMenuGroup label="#{msg.orderGroup}">
                        <rich:panelMenuItem label="#{msg.orderGenerate}" icon="/img/FILE_ADD.png" iconClass="iconX" >
                            
                        </rich:panelMenuItem>
                        <rich:panelMenuItem label="#{msg.orderApprove}" icon="/img/FILE_CHECK.png" iconClass="iconX">
                            
                        </rich:panelMenuItem>
                        <rich:panelMenuItem label="#{msg.orderConsult}" icon="/img/FIND.png" iconClass="iconX">
                            
                        </rich:panelMenuItem>
                    </rich:panelMenuGroup>
                </rich:panelMenu>
            </div>

Então galera, alguma dica de como se muda esses valores padrão do ícone do panelMenuItem?

Abraços!

15 Respostas

lucianotome

Cara, tenta isso:

<a4j:loadStyle src="resource:///org/mycompany/assets/css/common.css" />
Tchello

[quote=lucianotome]Cara, tenta isso:

<a4j:loadStyle src="resource:///org/mycompany/assets/css/common.css" />

Cara, me desculpe a ignorância, mas o que exatamente esse common.css faz?
Como devo usa-lo?

Abraços!

lucianotome

Nao cara, vc cria a sua folha de estilo, seu css, com a formatacao que vc dever aplicar ao seu formulario e usa a tag <a4j:loadStyle src= para aplicar o seu estilo aos componentes do richfaces, do modo que vc estava fazendo nao vai funcionar ele so vai aplicar o estilo aos seus compontentes, nao os do richfaces, a forma que eu passei foi so um exemplo de como usar

Tchello

AAhnnn entendi!!
Assim que der tempo (estou em outra operação agora =/) testo e posto os resultados!

Abraços!

lucianotome

Outra coisa, o resource que eu coloquei depois do src e somente se seu css estiver dentro de um jar, se nao estiver vc pode colocar o caminho como uma url

Tchello

Então cara, testei agora e ainda assim não ta indo… as imagens continuam em 16x16…
Da uma olhada:

menu.css

.iconX{
    width: 32px;
    height: 32px;
}

pagina.xhtml

...
<body>
        <a4j:loadStyle src="/css/menu.css" />
 ...
         <rich:panelMenu mode="ajax" 
                                iconExpandedTopGroup="chevronUp" iconGroupTopPosition="right"
                                iconCollapsedTopGroup="chevronDown">
                    <rich:panelMenuGroup label="#{msg.orderGroup}">
                        <rich:panelMenuItem label="#{msg.orderGenerate}" icon="/img/FILE_ADD.png" iconClass="iconX"/>
                        <rich:panelMenuItem label="#{msg.orderApprove}" icon="/img/FILE_CHECK.png" iconClass="iconX"/>
                        <rich:panelMenuItem label="#{msg.orderConsult}" icon="/img/FIND.png" iconClass="iconX"/>
                    </rich:panelMenuGroup>
                </rich:panelMenu>
...
</body>
...

Então, mais alguma sugestão?!
Sei lá pq ele ta desconsiderando minha css… =/

Abraços!

lucianotome

Cara, esquece o que eu falei, tenta isso:

<style type="text/css">  
             .rich-pmenu-item-icon{  
                 width: 82px;  
                 height: 132px;  
             }  
         </style>
Tchello

Cara, coloquei lá mas ainda assim não funcionou… ficou gigante cada menu item, mas o icone continua minusculo.

To começando a achar que ele nao aceita outros styles hehehee (senão aceitasse qual seria a funçao do “iconClass” ali?).

Ainda to na busca aqui.

Obrigadão pela ajuda!!
Abraços!

lucianotome

Cara, acho que oque vc esta tentando fazer nao vai ser tao simples, tava dando uma olhada nos fontes do richfaces e no metodo que cria o icon no trecho que estipula o tamanho do mesmo esta comentada:

public void drawIcon(ResponseWriter writer, String iconType, String imageSrc, UIComponent component, String id, boolean drawHidden) throws IOException{

		if (iconType != null && !iconType.equals("") && !iconType.equals("none")){

			int h = 16; //width(context);  <------------- Aqui ó

			writer.startElement("img", component);

			if (drawHidden) {

				writer.writeAttribute("style", "display: none;", null);

			}

			writer.writeAttribute("src", imageSrc, null);

			writer.writeAttribute("alt", " ", null);

			writer.writeAttribute("vspace", "0", null);

			writer.writeAttribute("hspace", "0", null);

			writer.writeAttribute("width", String.valueOf(h), null);

			writer.writeAttribute("height", String.valueOf(h), null);

			writer.writeAttribute("id", id, null);

			writer.endElement("img");

		}	

		

	}
Tchello

Ouch…

Isso explica muita coisa.

E onde é que fica a regrinha “Avoid magic numbers”? =(

Tendo isso não faço idéia de como sobrescrever esse valor… modificar o source e “recompilar” o jar?

Abraços!

lucianotome

Cara, vou dizer uma coisa, talvez nao seja a saida mais elegante, “como dizem nossos irmaos aqui do guj”, mas vc pode recompilar o jar com outro valor, ja que este esta por default fixo, ou reescrever esta classe dentro do teu projeto num pacote org.richfaces.renderkit, que ele ira sobreescrever o original, ai surge um pequeno problema, vc tera que verificar a versao do seu richfaces, pois existem diferencas consideraveis entre uma versao e outra

lucianotome
public abstract class PanelMenuRendererBase extends HeaderResourcesRendererBase {
Tchello

Precisamente!!

Acabei de baixar o source do RichFaces, no meu caso o 3.2.1 pq o 3.2.2 e o 3.3.0 não funciona o auto-complete com facelets.

Conversei com uma colega de trabalho e a sugestão que ela me deu foi justamente essa, mas foi algo do tipo extender a classe original e sobrescrever o método.

Vou procurar aqui e já posto mais respostas!
A propósito, qual classe exatamente é essa? Não consigo encontrada aqui.

Abraços!

lucianotome

O caminho no source do 3.3.0 e este aqui:

/richfaces-ui-3.3.0.GA/ui/panelmenu/src/main/java/org/richfaces/renderkit/
Tchello

Cara!
Fiz aquilo, criei um pacote no projeto com o mesmo caminho, copiei a classe e modifiquei o valor na mão… ufa!
FUNCIONOU!
RAAAAAAAAAAAAAAAAA!

Só deu um efeito esquisito, pq o menuGroup também usa aquela propriedade… pode isso? Isso me cheira a Gambi uauahuha
Por causa disso o MenuGroup ficou maior do que o planejado (indevidamente) mas fazer o que né? to tentando aqui hehehe

Valewzao pela ajuda, agora vou tentar diminuir esse menugroup ai.

Abraços cara!

Criado 23 de abril de 2009
Ultima resposta 24 de abr. de 2009
Respostas 15
Participantes 2