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!