Pessoal eu postei anteriormente nesse post http://www.guj.com.br/posts/list/223731.java#1146525 que nao esta atualizando o meu objeto, e resolvi mudando o scopo do meu ManagedBean para request, mas agora nao posso fzr isso, o meu managedBean tem q ser ViewScope, minha pagina é o seguinte tem um formulario padrao em tem um datalist com varios objetos com link de editar e remove, clicando no link “editar” ele seta o objeto e coloca os atributos dele no form, ate ai sem problema, agora qnd eu altero um atributo, a descricao por exemplo e clico no botao, qnd ele chega na funcao “btAcao()” o meu objeto ainda esta com o estado antigo, como eu faco para ele chegar com os atributos modificados na pagina ?
<h:head>
<h:outputStylesheet library="css" name="style.css"/>
<f:metadata>
<f:viewParam name="id" value="#{acoesAdmBean.id}"/>
</f:metadata>
</h:head>
<h:body>
<f:view contentType="text/html"/>
<div>
<h:form id="form">
<p:growl showDetail="true"/>
<h:outputLabel value="Id:" rendered="#{acoesAdmBean.acao.id != null}"/>
<h:inputText value="#{acoesAdmBean.acao.id}" readonly="true" rendered="#{acoesAdmBean.acao.id != null}"/>
<h:outputLabel value="Nome:" for="nome"/>
<h:inputText id="nome" value="#{acoesAdmBean.acao.nome}" /><br/>
<h:outputLabel value="descricao:" for="descricao"/>
<h:inputTextarea id="descricao" value="#{acoesAdmBean.acao.descricao}" />
<p:commandButton value="acao" action="#{acoesAdmBean.btAcao}" update="form"/>
<p:dataList value="#{acoesAdmBean.acoes}" var="a">
<p:column>
<p:panel>
#{a.nome}
<h:commandLink value="Editar">
<f:ajax render="@form"/>
<f:setPropertyActionListener value="#{a}" target="#{acoesAdmBean.acao}"/>
</h:commandLink>
<h:outputLabel value="|"/>
<h:commandLink value="Remover" action="remover">
<f:ajax render="@form"/>
<f:setPropertyActionListener value="#{a}" target="#{acoesAdmBean.acao}"/>
</h:commandLink>
<br/>
#{a.descricao}
</p:panel>
</p:column>
</p:dataList>
</h:form>
</div>
</h:body>
@ViewScoped
@ManagedBean(name="acoesAdmBean")
public class acoesAdmBean implements Serializable{
private Acoes acao = new Acoes();
private EntityManager em;
private String id;
private Campanha campanha;
private List<Acoes> acoes;
public EntityManager getEm() {
HttpServletRequest requestScope = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
em = (EntityManager)requestScope.getAttribute("em");
return em;
}
public void setEm(EntityManager em) {
this.em = em;
}
public String getId() {
if(id == null){
HttpServletRequest requestScope = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
id = requestScope.getParameter("id");
}
return id;
}
public void setId(String id) {
this.id = id;
}
public Campanha getCampanha() {
return campanha;
}
public void setCampanha(Campanha campanha) {
this.campanha = campanha;
}
@PostConstruct
public void carregaAcoes(){
System.out.println("contrui AcaoAdmBean !");
if(acoes == null){
CampanhaDAO dao = new CampanhaDAO(getEm());
campanha = dao.busca(Integer.parseInt(getId()));
acoes = (List<Acoes>) campanha.getAcoes();
}
}
public List<Acoes> getAcoes() {
return acoes;
}
public void setAcoes(List<Acoes> acoes) {
this.acoes = acoes;
}
public Acoes getAcao() {
System.out.println("pegando acao "+ acao.getDescricao());
return acao;
}
public void setAcao(Acoes acao) {
this.acao = acao;
System.out.println("setando acao "+ acao.getDescricao());
}
public void btAcao() {
HttpServletRequest requestScope = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
AcoesDAO dao = new AcoesDAO(em);
acao = dao.merger(acao);
acoes = dao.listaEspecifica(campanha);
}
}