O problema deve ser bem simples.
Veja a pagina abaixo: há 02 panelGroup onde eu renderizo um deles quando coloco o objeto Curso para edição, ou seja, o panelgroup primeiro aparece quando estou editando e o segundo com o filtro e o botão “novo” aparece inicialmente na tela.
<h:form>
<h:messages/>
<h:panelGroup rendered="#{cadastroCursoCadastroBasicoBean.existirEdicao}">
<h:panelGrid columns="2" id="pg" >
<h:outputText value="Sigla:"/>
<h:inputText size="10"
value="#{cadastroCursoCadastroBasicoBean.curso.sigla}"
maxlength="3"/>
<h:commandButton value="Salvar"
action="#{cadastroCursoCadastroBasicoBean.salvar}"/>
<h:commandButton value="Cancelar"
action="#{cadastroCursoCadastroBasicoBean.cancelar}"/>
</h:panelGrid>
</h:panelGroup>
<h:panelGroup rendered="#{!cadastroCursoCadastroBasicoBean.existirEdicao}">
<h:panelGrid columns="4" >
<h:commandButton value="Novo" immediate="true"
action="#{cadastroCursoCadastroBasicoBean.novo}"/>
<h:inputText value="#{cadastroCursoCadastroBasicoBean.cursoExemplo.sigla}"
maxlength="3"/>
<h:commandButton value="Pesquisar"
action="#{cadastroCursoCadastroBasicoBean.pesquisar}"/>
</h:panelGrid>
<h:dataTable value="#{cadastroCursoCadastroBasicoBean.listaCurso}"
var="row" >
<h:column>
<f:facet name="header" >
<h:outputLabel value="Sigla"/>
</f:facet>
<h:outputText value="#{row.sigla}"/>
</h:column>
</h:dataTable>
</h:panelGroup>
</h:form>
aqui esta o bean:
public class CadastroCursoCadastroBasicoBean extends ManageBean {
private Curso curso = null;
private Curso cursoExemplo = new Curso();
private List<Curso> listaCurso = null;
/** Creates a new instance of CadastroCursoCadastroBasicoBean */
public CadastroCursoCadastroBasicoBean() {
this.atualizarLista();
}
private void atualizarLista(){
this.listaCurso = AdminBasico.getListaCurso(cursoExemplo);
}
public String salvar(){
try {
AdminBasico.salvarCurso(this.curso);
this.atualizarLista();
this.curso = null;
super.addMessageSucesso();
return null;
} catch(Exception e){
super.addMessage(e);
}
return null;
}
public String novo(){
this.curso = new Curso();
return null;
}
public String cancelar(){
this.curso = null;
return null;
}
public String pesquisar(){
this.listaCurso = AdminBasico.getListaCurso(this.cursoExemplo);
return null;
}
public Curso getCurso() {
return curso;
}
public void setCurso(Curso curso) {
this.curso = curso;
}
public Curso getCursoExemplo() {
return cursoExemplo;
}
public void setCursoExemplo(Curso cursoExemplo) {
this.cursoExemplo = cursoExemplo;
}
public List<Curso> getListaCurso() {
return listaCurso;
}
public void setListaCurso(List<Curso> listaCurso) {
this.listaCurso = listaCurso;
}
public boolean existirEdicao(){
return this.curso != null;
}
public boolean isExistirEdicao(){
return this.curso != null;
}
e aqui esta a configuração do faces-config
<managed-bean>
<managed-bean-name>cadastroCursoCadastroBasicoBean</managed-bean-name>
<managed-bean-class>br.es.esab.uccadastrobasico.bean.CadastroCursoCadastroBasicoBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
O problema esta que quando clico no novo ele abre o painel para edição e quando clico no botão salvar não passa pelo salvar e volta para o painel inicial?
Mas se eu colocar <managed-bean-scope>session</managed-bean-scope>, funciona mais tenho que tratar tudo na sessão e queria tratar no request.
Outra coisa aproveitando a pergunta: quando tenho uma validação dentro do objeto que estou editando, por exemplo dentro do setNome do curso coloco uma exception e clico no salvar blz, a execption é exiba na tela, mas se clico no cancelar a validação tb é executada e não queria, mas se coloco imediate=true no botão cancelar passa, mas não passa pelo metodo de cancelar do meu bean. e agora como resolve isso?