<h:commandButton não executa action passado pelo Managed Bean

3 respostas
luk_genOcide

Ao escolher um item para edição em uma lista queremos fazer alteração nesse item.
Ele chama o metodo para alteração/update do item e o mesmo vai para a pagina de formulario, em forward, com os valores do bean nos campos do formulario.
Ele deveria fazer o update e mostrar a lista com o item alterado.
So que ele não executa o metodo para alteração.

O engraçado é que se usarmos diretamente o formulario para o cadastro de um novo item ele funciona.

Temos uma lista.jsp feita assim.
<c:forEach items="#{campusMBean.lista}" var="campus">
                    <tr>
                        <td>${campus.id}</td>
                        <td>${campus.nome}</td>
                       
                        <td>
                            <h:commandLink value="EDITAR" action="#{ campusMBean.editar }">
                                  <f:param name="id" value="#{campus.id}"/>
                            </h:commandLink>
                        </td>   
                       
                        <td>
                            <h:commandLink value="DELETAR" action="#{ campusMBean.remover }">
                                <f:param name="id" value="#{campus.id}"/>
                            </h:commandLink>
                        </td>
                       
                    </tr>
                </c:forEach>
Formulario jsp:
<f:view>
    <h:form>
        <table class="formulario">
            <caption>CADASTRO DE CAMPUS</caption>
            <tr>
                <td>ID:</td>
                <td><h:outputText value="#{ campusMBean.campus.id }" /></td>
            </tr>

            <tr>
                <td>NOME:</td>
                <td><h:inputText value="#{campusMBean.campus.nome}" /></td>
            </tr>

            <tfoot>
                <tr>
                    <td colspan="2">
                    <h:inputHidden value="#{campusMBean.campus.id }"/>
                    <h:commandButton action="#{campusMBean.cadastrar}" value="Cadastrar" rendered="#{ campusMBean.campus.id == 0 }" />

                      <%-- O ERRO OCORRE AQUI, ELE NÃO EXECUTA PARA ALTERAR --%>
                    <h:commandButton action="#{campusMBean.cadastrar}" value="Alterar" rendered="#{ campusMBean.campus.id != 0 }" />

                    </td>
                </tr>
            </tfoot>

        </table>
    </h:form>
</f:view>
E o faces-config:
<managed-bean>
        <managed-bean-name>campusMBean</managed-bean-name>
        <managed-bean-class>br.ufopa.siar.jsf.CampusMBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
MBean.java:
@Component("campusMBean") @Scope("request")
public class CampusMBean extends AbstractController {

	private Campus campus = new Campus() ;
	
	private SiarGenericDAO dao = new SiarGenericDAO();
	
	public String cadastrar() throws DAOException {
		
		if(campus.getId() > 0)
			dao.update(campus);
		else
			dao.create(campus);
		
		

		return redirect("/teste/listaCampus.jsf");
	}

	public String editar() throws SiarDAOException {

		int id = getParameterInt("id");
		
		campus = dao.findByPrimaryKey(id, Campus.class);

		return forward("/teste/formCampus.jsf");
	}

	public String remover() throws SiarDAOException {
		int id = getParameterInt("id");
		
		campus = dao.findByPrimaryKey(id, Campus.class);
		
		dao.remove(campus);
		
		return null;

	}

	 public List<Campus> getlista() throws DAOException{
	
		List<Campus> list = (List<Campus>) dao.findAll(Campus.class);
		return list;
	
	 }

	public Campus getCampus() {
		return campus;
	}

	public void setCampus(Campus campus) {
		this.campus = campus;
	}

}
Campus.java:
@Entity @Table(name = "campus")
public class Campus implements PersistDB{

	@Id 
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
	@SequenceGenerator(name = "id", sequenceName = "campus_seq")
	private int id;
	
	private String nome;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
}

Alguem tem ideia do que está acontecendo ??

3 Respostas

marcos1EM

Estranho cara, o método cadastrar realmente não executa na hora de editar? vc já debugou? Não é gerado nenhuma mensagem de erro no console?

luk_genOcide

Não, é estranho por isso, não mostra nada. Vou tentar fazer o debug. Alias como se faz o debug de uma pagina jsp/jsf ?
Vou procurar.

marcos1EM

Para debugar irá depender da IDE que você usa, porém o debug não seria necessariamente na página e sim em sua classe java onde o método é chamado.

Criado 21 de março de 2011
Ultima resposta 21 de mar. de 2011
Respostas 3
Participantes 2