não funciona o suporte AJAX em JSF+Facelets

17 views
Skip to first unread message

Gustavo Tomazi Ludwig

unread,
Nov 6, 2009, 8:56:05 AM11/6/09
to jav...@googlegroups.com
Pessoal,

Não estou conseguindo implementar o suporte a AJAX em meu projeto.

Não sei se o problema é de alguma configuração de web.xml ou
faces-config.xml ou da implementação em si...

Preciso de idéias e/ou dicas para resolver a situação.

Obrigado,
Gustavo


Gustavo Tomazi Ludwig

unread,
Nov 6, 2009, 9:05:39 AM11/6/09
to jav...@googlegroups.com
Em tempo, tentei montar um <h:selectOneMenu> conforme:

<h:selectOneMenu
id="entityDropDown"
value="#{anamanRegisterMB.selectedEntity}"

valueChangeListener="#{anamanRegisterMB.populateRefType}"
>
<f:selectItems
value="#{anamanRegisterMB.entities}" />
<a4j:actionparam
name="apEntity"

attachTo="#{anamanRegisterMB.selectedEntity}"
reRender="typeDropDown" />
</h:selectOneMenu>

o que eu quero é que o valor selecionado neste combo seja passado para a
string selectedEntity do managed bean.

tentei a implementação sugerida pelo TubaFTC mas não deu certo...

help, please! :)

Gustavo

Henrique Ribeiro Rezende

unread,
Nov 6, 2009, 9:47:28 AM11/6/09
to jav...@googlegroups.com
Eu fiz isso, porém não usei o <a4j:actionparam não... apenas o valueChangeListener

Seria algo do tipo:


<h:selectOneMenu id="entityDropDown" value="#{anamanRegisterMB.selectedEntity}"
                             valueChangeListener="#{anamanRegisterMB.populateRefType}">
      <f:selectItems value="#{anamanRegisterMB.entities}" />
</h:selectOneMenu>

Aí lá no anamanRegisterMB você colocaria o método:

public void populateRefType(ValueChangeEvent event) {
    if (event != null) {
        Entity e = (Entity) event.getNewValue();
        this.selectedEntity = e;
    }
}

Se isto não der certo, poste a sua configuração aí...

Daniel@LG

unread,
Nov 6, 2009, 1:55:27 PM11/6/09
to javasf: JavaServer Faces International Group
Me corrijam seu estiver enganado, mas nao faltou o Supporte do Ajax?

eu faço assim:


<h:selectOneMenu id="productCatId" value="#
{ServiceOrderBean.serviceOrderVO.productCatId}" style="width:270px;"
immediate="true" required="true" >
<f:selectItem itemValue="" itemLabel="..." />
<f:selectItems value="#{ServiceOrderBean.myProductCategory}" />
<a4j:support id="listaCategoria" event="onchange"
reRender="productSegment,messagesId" />
</h:selectOneMenu>


Abracos!

Gustavo Tomazi Ludwig

unread,
Nov 6, 2009, 2:06:51 PM11/6/09
to jav...@googlegroups.com
gente,

consegui resolver aqui, mas acabei não postando a solução. Segue agora:

<rich:comboBox
id="entityDropDown"

defaultLabel="#{bundle['anamanRegisterServiceJSP.selectEntity']}"
width="300"
listHeight="100px"
immediate="true"

valueChangeListener="#{anamanRegisterMB.populateRefType}"
value="#{anamanRegisterMB.selectedEntity}" >
<f:selectItems
value="#{anamanRegisterMB.entities}" />
<a4j:support
event="onchange"
reRender="typeDropDown"
immediate="true" />
</rich:comboBox>

e no managed bean:

public void populateRefType(ValueChangeEvent event) {
if (event != null) {
AnamanRegister e = new AnamanRegister();
e.setRegisterEntity((String) event.getNewValue());
selectedEntity = e.getRegisterEntity();
}
//selectedEntity = (String) event.getNewValue();
//System.out.println("cheguei aqui: " + selectedEntity );
FacesContext.getCurrentInstance().renderResponse();
}


Ainda estou estudando como formatar o label do SelectItem(Object value,
String label).

Minha idéia é que o valor que apareça no combo seja uma composição de
Strings, algo como:
String label = "100.0000" +" - " + " Blah"

Onde "100.0000" e "Blah" são valores que vêm do banco, mas o "Blah" uso
parâmetro de filtro no próximo combo.

Quando deixo assim:
public List<SelectItem> getRefTypes() {
List<SelectItem> refTypes = new ArrayList<SelectItem>();
System.out.println("selectedEntity-MB for refTypeList: " +
selectedEntity);

List<AnamanRegister> rTLBE =
ars.getRegisterRefTypeListByEntity(selectedEntity);
for (AnamanRegister rType : rTLBE) {
if (rType.getIdRegister() != 0
&&
rType.getRegisterArea().equalsIgnoreCase("registerarea")) {
String refLabel = rType.getRegisterRef();
String typeLabel = rType.getRegisterType();
String displayLabel = refLabel + " - " + typeLabel;
System.out.println(displayLabel);
refTypes.add(new SelectItem((String)typeLabel,
displayLabel));
}
}
return refTypes;
}

só aparece o "Blah".

O que é melhor? Tratar isso no managed bean (por exemplo no método
chamado pelo comboBox durante o valueChangeEvent? Ou implementar isso
via conversor? Estou tentando evitar uso de conversores...

Obrigado,
Gustavo

Henrique Ribeiro Rezende

unread,
Nov 6, 2009, 2:29:52 PM11/6/09
to jav...@googlegroups.com
No caso o a4j:support só está servindo para atualizar typeDropDown
Eu uso sem o support mesmo porque não preciso dar reRender em nada aqui.

Quanto ao que você quer fazer acho que dá pra fazer com conversor sim, porém no meu caso eu populo o combobox no próprio método mesmo.

Algo do tipo:

<h:selectOneMenu value="#{bean.valorSelecionado}" valueChangeListener="#{bean.mudaValor}">
      <f:selectItems value="#{bean.opcoes}" />
</h:selectOneMenu>

E no bean além do mudaValor() vou ter o getOpcoes

    public List<SelectItem> getOpcoes() {
        List<Entidade> opcoesLista = this.getEntidades;
        opcoes = new ArrayList<SelectItem>(opcoesLista.size());

        for(Entidade item : opcoesLista){
            opcoes.add(new SelectItem(item, item.getNome()));
        }
        return opcoes;
    }

Dentro desse for você pode personalizar como você vai querer mostrar seu combobox...

[]'s
Reply all
Reply to author
Forward
0 new messages