Crud com jsf

4 respostas
E

Estou criando um CRUD com jsf a partir do exemplo da k19. Mas quando vou alterar ou remover não consigo pegar o “id” do usuário.

UserBean

@ManagedBean
public class UsersBean extends AbstractBean{
	
	private Users user = new Users();
	private List<Users> users;
	
	public void adicionar(){
		EntityManager manager = this.getManager();
		UsersRepository repository = new UsersRepository(manager);
		if(this.user.getIdUser() == null){
			repository.adicionar(this.user);
		}else {
			repository.atualizar(this.user);
		}
		this.user = new Users();
		this.users = null;
	}
	
	public void prepararAlteracao(){
		Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		UsersRepository repository = new UsersRepository(manager);
		this.user = repository.procurar(id);
	}
	
	public void remover(){
		Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		UsersRepository repository = new UsersRepository(manager);
		repository.remover(id);
		this.users = null;
	}
	
	public List<Users> getUsers(){
		if(this.users == null){
			EntityManager manager = this.getManager();
			UsersRepository repository = new UsersRepository(manager);
			this.users = repository.listar();
		}
		return this.users;
	}
	
	public Users getUser() {
		return user;
	}
	
	public void setUser(Users user) {
		this.user = user;
	}
<h:panelGroup >
			<h:dataTable id="tabela" value="#{usersBean.users}" 
				var="user" styleClass="dados" rowClasses="par, impar">
				
				<h:column>
					<c:facet name="header">
						<h:outputText value="ID" />
					</c:facet>
					#{user.idUser}
				</h:column>
				
				<h:column>
					<c:facet name="header">
						<h:outputText value="Nome" />
					</c:facet>
					#{user.cdUser}
				</h:column>
				
				<h:column>
					<c:facet name="header">
						<h:outputText value="Email" />
					</c:facet>
					#{user.cdEmail}
				</h:column>
				
				<h:column>
					<c:facet name="header">
						<h:outputText value="Alterar" />
					</c:facet>
					<c:ajax event="click" render="@form" listener="#{usersBean.prepararAlteracao}">
						<h:commandLink  name="id" value="#{user.idUser}" >Alterar</h:commandLink>
					</c:ajax>
				</h:column>	
				
				<h:column>         
					<c:facet name="header">
						<h:outputText value="Remover" />
					</c:facet>
					<c:ajax event="click" render="@form" listener="#{usersBean.remover}">
						<h:commandLink  name="id" value="#{user.idUser}" >Alterar</h:commandLink>
					</c:ajax>
				</h:column>				
			
			</h:dataTable>
		</h:panelGroup>
Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));

No método prepararAuteracao: o params.get(“id”) esta vindo null

Alguém pode me ajudar

4 Respostas

kilate

Olá meu amigo!

Tente passar um

<h:inputHidden value="#{user.idUser}" />

Mas de qualquer forma, por que você não tenta fazer isso com o setPropertyActionListener, ao invéz de resgatar o id em baixo nível?

Um abraço!

E

Pode dar um exemplo de como utilizar o setPropertyActionListener?

kilate

Olá amigo,

Corrigindo meu primeiro post, eu quiz dizer h:inputHidden. Já fiz a edição.

Aqui está um exemplo:

<h:commandLink value="Alterar">
    <f:setPropertyActionListener target="#{usersBean.user}" value="#{user}" />
</h:commandLink>

//target: propriedade que você quer alterar
//value: seu novo valor

Abraços!

E

Amigo, funcionou perfeitamente. Muito obrigado.

Abraço.

Criado 30 de junho de 2012
Ultima resposta 2 de jul. de 2012
Respostas 4
Participantes 2