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>
<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>
<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>
@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;
}
}
@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 ??