[RESOLVIDO] a4j:support selectOneMenu

Pessoal,

Tenho o seguinte código:

<h:selectOneMenu value="#{linkResolver.codigo}" id="tipoLink">
	<f:selectItem itemValue="" itemLabel="" />
	<f:selectItems value="#{linkResolver.tipos}" />
	<a4j:support event="onchange" reRender="linkDataTable"></a4j:support>
</h:selectOneMenu>

e:

<rich:dataTable
	width="100%"
	id="linkDataTable"
	onRowMouseOver="this.style.backgroundColor='#d8e2e4'"
	onRowMouseOut="this.style.backgroundColor='white'"
	onRowClick="linkGridRadioCheck('#{link.link}','#{link.nomeLink}')"
	cellpadding="0"
	cellspacing="0"
	rows="5"
	reRender="ds"
	var="link" value="#{linkResolver.dataModel}">
/..
</rich:dataTable>

A partir do código setado no combobox, pego um dataModel diferente pra renderizar em tela. Bem simples.
Mas, no setter do código, coloquei o seguinte:

public void setCodigo(String codigo) {
	System.out.println("Setting code: " + codigo);
	this.codigo = codigo;
}

E está aparecendo "Setting code: " assim vazio.
Nunca está setando com os códigos do combo. Algum pode dar uma ajuda?

Tudo isso está dentro de um modalPanel.

Qual o escopo que está utilizando no seu bean “linkResolver”?

to usando Spring, por enquanto está como singleton…

Tente o seguinte:

public void loadDataModel() {
          System.out.println("The value of code atribbute is: " + this.code);
          //Codido para montar o datamodel.
}

Olá Guilherme,

para funfar tente o seguinte.

<h:selectOneMenu value="#{linkResolver.codigo}" id="tipoLink" binding="#{linkResolver.codigo}">  
<f:selectItem itemValue="" itemLabel="" />  
<f:selectItems value="#{linkResolver.tipos}" />  
<a4j:support event="onchange" reRender="linkDataTable"></a4j:support>  
</h:selectOneMenu>  

teste ai e qqr coisa é só postar

abss

[quote=wagner_a_lima]Tente o seguinte:

public void loadDataModel() {
          System.out.println("The value of code atribbute is: " + this.code);
          //Codido para montar o datamodel.
}

[/quote]

public void loadDataModel(){
	System.out.println("Codigo: " + codigo);
}

Saida: Codigo:

Saida: Setting code: javax.faces.component.html.HtmlSelectOneMenu@578fd6

Em nenhum dos casos consegui pegar o codigo…

Descobri o que acontece, mas não tenho uma solução.

Por estar dentro de um modalPanel, como disse antes, algum BUG não deixa o codigo ser setado. Copiei e colei o codigo fora do modalPanel e funcionou…

Alguem sabe uma solução ou qualquer coisa que possa me ajudar?

Obrigado,

Faça o seguinte, continue com isso:

<h:selectOneMenu value="#{linkResolver.codigo}" id="tipoLink" binding="#{linkResolver.codigo}">    
<f:selectItem itemValue="" itemLabel="" />    
<f:selectItems value="#{linkResolver.tipos}" />    
<a4j:support event="onchange" reRender="linkDataTable"></a4j:support>    
</h:selectOneMenu>    

e faça:

public void setCodigo(HtmlSelectOneMenu  codigo) {  
    System.out.println("Setting code: " + (String) codigo.getValue());  
    this.codigo = codigo;  

qqr coisa posta de novo, continua do modo que estava, mas tenta assim agora, mudando seu bean dessa forma.

abss

Zabimaru,

Tentei o que você falou, mas o setter precisa ser de String, senão o Faces reclama.

Então Guilherme vc vai fazer o seguinte, para o binding vc vai criar um atributo na bean e para pegar o valor mesmo quando vc der um submit vc vai usar um atributo string, faça o seguinte então:

public void setCodigo(String codigo) {    
System.out.println("Setting code: " + codigo);    
 this.codigo = codigo;   


public void setCodigo2(HtmlSelectOneMenu  codigo2) {    
System.out.println("Setting code: " + (String) codigo2.getValue());    
 this.codigo2 = codigo2;   

<h:selectOneMenu value="#{linkResolver.codigo}" id="tipoLink" binding="#{linkResolver.codigo2}">      
<f:selectItem itemValue="" itemLabel="" />      
<f:selectItems value="#{linkResolver.tipos}" />      
<a4j:support event="onchange" reRender="linkDataTable"></a4j:support>      
</h:selectOneMenu>  

faça assim,

abss

Cara, se vc precisa fazer submit de dados que estão em um modal panel vc deve fazer o seguinte:

O modal panel deve ter seu proprio form e a declaracao do modal panel deve estar fora de qualquer outro form. Está informação está na documentação do Richfaces.

Exemplo:

<h:form>
form normal da pagina
</h:form>

rich:modalPanel
<h:form>
form do modal panel
</h:form>
rich:modalPanel

Realmente o que o lfpolli falou é verdade. Eu separei os forms, tive que fazer umas outras coisas também, daí funcionou! Pode me passar o link de onde a documentação fala isso? Queria dar uma olhada no que mais ele fala.

O engraçado é que tenho um outro modalPanel que usa AJAX e dentro dele tem uma DataTable com DataScroller e links pra dar um sort na tabela, e lá funciona normalmente. Parece que em alguns casos o RichFaces não conseguiu solucionar esses bugzinhos ^^.

Valeu pessoal.

Segue o link: http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html_single/index.html está na seção de componentes, onde fala sobre o modalPanel. O Richfaces Developer Guide é muito útil para quem está desenvolvendo com Richfaces, ele contém muitas dicas e avisos sobre comportamentos mais peculiares de alguns componentes.

No outro modalPanel vc não tem problemas porque, tenho a impressão, que o sort é feito no lado cliente, mas não posso confirmar a informação. De qualquer maneira vc só precisa ter um formulário dentro do modalPanel se vc precisa submeter dados, caso seja somente visualização isso não é necessário.

Eu já tenho essa documentação, só não tinha lido essa parte dos forms ^^

Quanto ao sort, é AJAX mesmo, não roda no cliente pois tem que refazer o select do banco… Mas beleza, problema resolvido

Vlw a todos.

Opa que bom que resolveu,

bem eu não uso um form para modal panel, tanto é que eu crio apenas um form, não fico criando forms para cada página, eu faço o seguinte crio um template e defino um body nesse template, da seguinte forma:

<ui:insert name="body">
</ui:insert>

depois nas página eu só defino o body,

abss

Colocar vários forms em uma única página fica um lixo, fora que no FireFox 11 da alguns problemas, o ideal seria ter um único form por pagina, mas como o rich:modal não da pra trabalhar desta maneira optei utilizando JQuery, bem melhor:
http://code.google.com/p/simplemodal/downloads/list