JSF Passgem de parametro no SelectOnMenu

21 respostas
mrcristiano

Ola Pessoal,
sou novo no desenvolvimento web e precisava de vossa ajuda
e seguinte tenho um selectOnMenu que quando seleciono um item no mesmo e esse é passado como parametro atraves de um conversor a um metodo que meretorna uma lista de objectos e ja fiz “println” e ele esta passando no metodo, agora o meu probema que queria listar os dados que sao rotornados quando eu clicar num botao mas nao tou conseguindo:
deixo aki um excerto meu codigo que talvez de pa perceber melhor o que eu quero:

<h:form> <h:selectOneMenu value="#{BeanListProcess.processHandleAp.bpelProcess}"> <f:selectItems value="#{BeanListProcess.processHandleToCombo}"/> <f:converter converterId="ProcessHandleConvert"/> </h:selectOneMenu> <h:commandButton value="Obter Instancias" action="goToListInstance"/> </h:form>
Metodo que obtem os dados:

public List<InstanceHandle> getInstanceByProcess(String pName) throws ServerException{ System.out.println("Por parametro"); List<InstanceHandle> toReturn = new LinkedList<InstanceHandle>(); WhereCondition theCondition = new WhereCondition(); theCondition.append(SQLDefs.CI_process_id).append(" = ?"); theCondition.setString(1, pName); instHandle = super.getLocator().listInstances(theCondition); for(int i=0;i< instHandle.length;i++){ System.out.println("For"); inst=instHandle[i]; InstanceHandle instAcesso = new InstanceHandle(); populateInstanceHandle(instAcesso,inst); toReturn.add(instAcesso); } return toReturn; }
Conversores

public Object getAsObject(FacesContext context, UIComponent component, String value) {
        System.out.println("String to Object");
        try {
            return instanceAp.getInstanceByProcess(value);
        } catch (ServerException ex) {
            Logger.getLogger(ProcessHandleConvert.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }//
public String getAsString(FacesContext context, UIComponent component, Object value) {
        System.out.println("Ojecto para String");
        BProcessHandle bprocess =  (BProcessHandle) value;
        return bprocess.getProcessId();
    }

Desde já muito Obrigado
Cristiano

21 Respostas

paulofernandesjr

cara não deu para entender qual o problema, ou onde ele ocorre, pelo que entendi deve ser problema no scope

abraço

mrcristiano

paulofernandesjr:
cara não deu para entender qual o problema, ou onde ele ocorre, pelo que entendi deve ser problema no scope

abraço


Talves nao tenha esplicabo bem ou o codigo nao ajuda muito:D
tou trabalaho com a API do BPEL e ja meti o nome todas as os processos bpel que tenho no Banco numa combo eu quero selecionar um deles e ao clicar num botao ele pega no que tiver selecionado e passao como parametro nesse metodo e ele vai ao banco me buscar todoas todas as instancias referentes a esse processo. so que nao sei como implemetar isso no Bean para receber esse parametro de quando click no botao e de seguida me apresenta numa “table por exemplo” todas as instancias que ele retornou o banco.

espero que tenha sido melhor agora :smiley:

paulofernandesjr

no seu controller pega o

processHandleAp.bpelProcess

ai você sabe qual o processo ai é só fazer a consulta no BD

mrcristiano

paulofernandesjr:
no seu controller pega o

processHandleAp.bpelProcess

ai você sabe qual o processo ai é só fazer a consulta no BD

cara mas ja consigo pegar da BD pois faco println e vejo que ele foi a BD quando clikei no no botao
ou seja o metodo ta funcionado atraves do coversor que apresentei onde eu chamo esse metodo, meu problema é chamar outra pagina que me lista os dados retornados por esse metodo
tipo tentei criar esse metodoseguinte no bean mas acho que fiz mal pois chamo no botao mas nao funcioana

public List<InstanceHandle> getInstanceHdProcess() throws ServerException {
        if(instanceHdProcess==null){
            instanceHdProcess = instanceHandleAp.getInstanceByProcess(bpelProcess.getProcessId());
         }
        return instanceHdProcess;
    }
paulofernandesjr

como esta o seu faces config.xml, o navigation-rule está correto…

ele refireciona para a página

mrcristiano

nao tou muito esperiente nisso tou mandado o xml todo:D

<navigation-rule> <from-view-id>/welcomeJSF.jsp</from-view-id> <navigation-case> <from-outcome>goToListInstance</from-outcome> <to-view-id>/listarInstancias.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>goToRemove</from-outcome> <to-view-id>/apagarInstancia.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>goToProcess</from-outcome> <to-view-id>/listProcess.jsp</to-view-id> </navigation-case> </navigation-rule> <managed-bean> <managed-bean-name>BeanListInstance</managed-bean-name> <managed-bean-class>pt.optimizer.instance.Beans.BeanListInstance</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>/apagarInstancia.jsp</from-view-id> <navigation-case> <from-outcome>refreshPage</from-outcome> <to-view-id>/apagarInstancia.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>goToMain</from-outcome> <to-view-id>/welcomeJSF.jsp</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/listarInstancias.jsp</from-view-id> <navigation-case> <from-outcome>goToMain</from-outcome> <to-view-id>/welcomeJSF.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>refreshPage</from-outcome> <to-view-id>/listarInstancias.jsp</to-view-id> </navigation-case> </navigation-rule> <converter> <converter-id>InstanceHandleConvert</converter-id> <converter-class>pt.optimizer.instance.converters.InstanceHandleConvert</converter-class> </converter> <managed-bean> <managed-bean-name>BeanListProcess</managed-bean-name> <managed-bean-class>pt.optimizer.instance.Beans.BeanListProcess</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>/listProcess.jsp</from-view-id> <navigation-case> <from-outcome>goToListInstance</from-outcome> <to-view-id>/listarInstancias.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>goToMain</from-outcome> <to-view-id>/welcomeJSF.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>refreshPage</from-outcome> <to-view-id>/listProcess.jsp</to-view-id> </navigation-case> </navigation-rule> <converter> <converter-id>ProcessHandleConvert</converter-id> <converter-class>pt.optimizer.instance.converters.ProcessHandleConvert</converter-class> </converter>

paulofernandesjr

o seu controller(ManagedBean) deve retornar algo que esta entre as tags

para assim saber qual página deve ser exibida!

entendeu?

mrcristiano

[quote=paulofernandesjr]o seu controller(ManagedBean) deve retornar algo que esta entre as tags

para assim saber qual página deve ser exibida!

entendeu?
[/quote
ok vou implementar esse isso entao
e digo algo…
valeu

mrcristiano

valeu pela dica
problema resolvido

paulofernandesjr

era o que eu disse ou fez algo a mais, complete o post para ajudar aos outros

abraço

mrcristiano

criei o tal metodo e que me deste como dica e
e alterei o o modo de prenceher a combo
so que tou notando um pequeno problema quando navego entre as paginas ele da erro
na sei se é do scope podia me dar uma dica antes de potar a minha solucão!!
pois ja pela logica seria de request que é o que tenho

paulofernandesjr

passa mais informações que desse jeito não deu para entender

abraço

mrcristiano
tenho esse faces-config.xml
<navigation-rule>
        <from-view-id>/listarProcessos.jsp</from-view-id>
        <navigation-case>
            <from-outcome>goToMain</from-outcome>
            <to-view-id>/welcomeJSF.jsp</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>processes</from-outcome>
            <to-view-id>/listarInstancias.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    <managed-bean>
        <managed-bean-name>BeanLoadCombo</managed-bean-name>
        <managed-bean-class>pt.optimizer.instance.Beans.BeanLoadCombo</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>BeanGetSelectCombo</managed-bean-name>
        <managed-bean-class>pt.optimizer.instance.Beans.BeanGetSelectCombo</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/apagarInstancia.jsp</from-view-id>
        <navigation-case>
            <from-outcome>goToMain</from-outcome>
            <to-view-id>/welcomeJSF.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
Na paginha principal tenho:
<f:view>
            <h:form>
                <h:commandLink action="goToListInstance" value="Instancias Completas"/>
                <br>
                <h:commandLink action="goToListProcess" value="Processos"/><br>
            </h:form>
        </f:view>
No com A combo Tenho isso:
<h:form>
                <h:messages/>
                <h:selectOneMenu id="ola" value="#{BeanGetSelectCombo.selectProcess}">
                    <f:selectItems value="#{BeanLoadCombo.processToCombo}"/>
                </h:selectOneMenu>
                <h:commandButton value="Obter Instancias" action="#{BeanGetSelectCombo.confirmSelect}"/>
            </h:form>
            <h:form>
                <h:commandButton value="Retornar" action="goToMain"/>
            </h:form>
e qaundo vou do princippal pra ki funciona na boa quando volto principal dam seguinte erro:
javax.servlet.ServletException: org.apache.jasper.el.JspELException: /listarInstancias.jsp(15,5) '#{BeanGetSelectCombo.teste}' Error reading 'teste' on type instance.Beans.BeanGetSelectCombo
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

javax.faces.FacesException: org.apache.jasper.el.JspELException: /listarInstancias.jsp(15,5) '#{BeanGetSelectCombo.teste}' Error reading 'teste' on type instance.Beans.BeanGetSelectCombo
	javax.faces.component.UIData.getValue(UIData.java:585)
	javax.faces.component.UIData.getDataModel(UIData.java:1063)
	javax.faces.component.UIData.setRowIndex(UIData.java:417)
	javax.faces.component.UIData.iterate(UIData.java:1131)
	javax.faces.component.UIData.processDecodes(UIData.java:936)
mrcristiano
ja agora os metodos responsaveis pois o problema de listar as intancias de um determinhado processo ja ta resolvido fica aki pra kem vier a precisar:D:
public String confirmSelect() throws ServerException{
        instH = new InstanceHandleAPPS();
        instH.getInstanceByProcess(selectProcess);
        System.out.println(selectProcess);
        return "processes";
    }

    public List<MyInstanceHandle> getTeste() throws ServerException {
        System.out.println("Passou na lista");
        if(teste==null){
            teste = instanceHandleAp.getInstanceByProcess(selectProcess);
         }
        return teste;
    }

    public List<SelectItem> getProcessToCombo() throws ServerException {
        List<SelectItem> toReturn = new LinkedList<SelectItem>();
        toReturn.add(new SelectItem(null,"Selecionar Processo...."));
         for(BProcessHandle proc: processHandleAp.getAllProcess()){
             toReturn.add(new SelectItem(proc.getProcessId(),proc.getProcessId()));
         }
         return toReturn;
    }
paulofernandesjr

no action dos botoes procure colocar o ManagedBean do qual ele pertence

<h:commandButton value="Retornar" action="#{seuMB.goToMain}"/>
mrcristiano

por acaso hj nao peguei nisso…
se eu tiver errado corrija-me pois ainda tou baby nisso lol
mas esse goToMain é uma regra de navegaçao que eu fiz ni flow do faces-config.xml do netbeans e nao um metodo que esta num bean
ou ele aceita isso?
abraço

paulofernandesjr

eu desconheço isso…

mas sou iniciante ainda!

abraço

mrcristiano

ya ok
valeu

mrcristiano

era minha inexperiencia que o fazia dar erro
lol
tinha a tablela dentro do <h:form> do botao e como o botao nao actuava sobre o tabela logo dava erro.

paulofernandesjr

mrcristiano:
era minha inexperiencia que o fazia dar erro
lol
tinha a tablela dentro do <h:form> do botao e como o botao nao actuava sobre o tabela logo dava erro.

normal isso cara…

se acostuma

juniorsatanas

paulo tu tem esse crud por ai ? poderia mandar para eu da uma olhda ? [email removido] to esse problema tbm !

valeu jr.

Criado 30 de março de 2009
Ultima resposta 11 de mar. de 2010
Respostas 21
Participantes 3