[RESOLVIDO] Salvar parâmetros da URL em atributos de um componente do Seam

Olá!

A minha aplicação é iniciada através de um url do tipo

http://localhost:8080/configuradorrs/home.seam?idActor=ues&idProject=2

Eu preciso salvar esses parâmetros em um componente, para que possa ter acesso a essas informações posteriormente.
Fiz da seguinte maneira

[code]
@Name(“homeAction”)
@Scope(ScopeType.CONVERSATION)
public class HomeAction implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -4694237049008052171L;

@In
private Actor actor;

@In
private StatusMessages statusMessages;

@In(create=true)
private JbpmContext jbpmContext;

@RequestParameter
private String idActor;

@RequestParameter
private String idProject;

public String getIdActor() {
	return idActor;
}

public void setIdActor(String id) {
	this.idActor = id;
}

public String getIdProject() {
	return idProject;
}

public void setIdProject(String idProject) {
	this.idProject = idProject;
}

public boolean isAvaliableToProceed() {
	//return (idActor != null && idProject != null);
	return true;
}

public void initializeParams() {
	if (idActor != null && idProject != null) {
		actor.setId(idActor);
		actor.getGroupActorIds().add("researcher");
	} else {
		statusMessages.addFromResourceBundle("initialpage.paramsnotfound.message");
	}
}

@Transactional
public String begin() {
	GraphSession gs = jbpmContext.getGraphSession();
	ProcessDefinition def = gs.findLatestProcessDefinition("buildProtocol");
	
	String processInstanceKey = "pik_" + idProject;
	
	ProcessInstance pi = jbpmContext.getProcessInstance(def, processInstanceKey);
	if (pi == null) {
		pi = new ProcessInstance(def, null);
		pi.setKey(processInstanceKey);
		Token tkn = pi.getRootToken();
		tkn.signal();
	} else {
		//TODO: Query for Pooled Task List associated with this Process Instance
		pi.resume();
	}
	return "/listActivities.xhtml";
}

}[/code]

Para poder fazer tal atribuição dos parâmetros ao componente, declarei o seguinte trecho no arquivo pages.xml

<page view-id="/home.xhtml"> <action execute="#{homeAction.initializeParams}"/> <param name="idActor" value="#{homeAction.idActor}"/> <param name="idProject" value="#{homeAction.idProject}"/> </page>

Por fim, a página xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:s="http://jboss.com/products/seam/taglib"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:rich="http://richfaces.org/rich"
    template="layout/template.xhtml">

    <ui:define name="body">
		<div align="center">
        <h1>#{messages['initialpage.welcome.message']}</h1>
        <rich:panel>
            <h:panelGrid columns="3">
                <h:graphicImage value="/img/logopesc.gif" alt="PESC logo"/>
                <s:div styleClass="info">
                    <p>
                    	<strong>#{messages['initialpage.main.message']}</strong><br />
                    	<strong>#{messages['initialpage.start.message']}</strong>
                    </p>
                    
                </s:div>
                <h:graphicImage value="/img/esegroup_logo.png" alt="PESC logo"/>
            </h:panelGrid>
        </rich:panel>
        </div>
		<div align="center">
			<h:form>
				<h:commandButton value="#{messages['button.start']}" action="#{homeAction.begin}" disabled="#{!homeAction.avaliableToProceed}">
					<s:conversationPropagation type="join"/>
				</h:commandButton>
			</h:form>
		</div>
    </ui:define>
</ui:composition>

No entanto, dentro do próprio método begin eu já não tenho acesso ao valor dos parâmetros. Eu coloquei o componente com o escopo CONVERSATION porque desejo ter acesso aos dados durante a navegação na aplicação (estou usando JBPM).
O que estou fazendo de errado e como posso resolver o problema?
Obrigado!

O que eu reparei é que no método initializeParams (executado assim que a página é exibida), os parâmetros são armazenados no componente corretamente. No entanto, ao clicar no botão que redireciona pra próxima página, os valores se perdem. Eu pensei que poderia ser pelo fato de não ter iniciado uma conversação. Então eu coloquei a annotation no método initializeParams

@Begin(join=true) public void initializeParams() { if (idActor != null && idProject != null) { actor.setId(idActor); actor.getGroupActorIds().add("researcher"); } else { statusMessages.addFromResourceBundle("initialpage.paramsnotfound.message"); } }
E propago a conversação quando no trecho

<h:commandButton value="#{messages['button.start']}" action="#{homeAction.begin}" disabled="#{!homeAction.avaliableToProceed}"> <s:conversationPropagation type="join"/> </h:commandButton>

No entanto, o problema persiste.

Fala espirito, blz?

Acho que vc trocou algumas bolas:

  1. Usar @RequestParameter, ou usar no pages.xml produzem o mesmo resultado. Uso ou um ou outro.
  2. Vc precisa iniciar o conversation em algum lugar. Eu costumo fazer no pages tb, como primeiro coisa,

Testa e me fala.

Fiz como você comentou e funcionou! \o/
Preferi usar no pages.xml

Valeu!!