4
respostas

duvida de como recuperar objeto persistido e montando no formulário.

Olá amigos, estou com formulário que já consigo persisistir normalmente. Agora esse formulário eu consigo montar para poder editar, mais tenho um pequeno problema, como faço para recuperar o objeto no combobox?

OBS: Apenas carreguei novamente todos os objetos para mostrar no combobox.

public class RecuperaTarefaLogic implements Logica {

    @Override
    public String executa(HttpServletRequest request, HttpServletResponse response) throws Exception {

        Connection connection = ConnectionFactory.getConnection();

        Integer id = Integer.parseInt(request.getParameter("id"));

        request.setAttribute("statusTarefas", Arrays.asList(Situacao.values()));
        request.setAttribute("tarefa", new TarefaDAO(connection).buscaTarefaPorId(id));

        return "WEB-INF/jsp/view/adicionar.jsp";
    }

------------------------------


    <form action="mvc?logica=AdicionaAlteraTarefaLogic" method="post">

                Titulo:<br />
                <input type="text" name="titulo" value="${tarefa != null ? tarefa.titulo : ''}"> <br>

                Descricao<br />
                <textarea rows="8" cols="19" name="descricao">${tarefa.descricao != null ? tarefa.descricao : ''}</textarea> <br> 

                Data:<br />
                    <geraData:campoData id="data" />

                <br /> Status:<br /> <select name="situacao">
                    <c:forEach items="${statusTarefas}" var="st" varStatus="id">
                        <option value="${st.situacao}">${st.situacao}</option>
                    </c:forEach>
                </select> <br />
                <br /> <input type="submit" value="Gravar">
            </form>
        </fieldset>
    </article>
    <c:import url="/WEB-INF/jsp/template/rodape.jsp" />
4 respostas

Opa,

Basta passar o valor desejado pro campo value e verificar se há um objeto com o id correspondente, pra ele mostrar selecionado.

Obrigado peloa ajuda!

ainda estou enrolado. olha ai como estou fazdendo.

<br /> Status:<br /> <select name="situacao">
                    <c:forEach items="${statusTarefas}" var="st" varStatus="id">
                        <option value="${tarefa.id != null ? st.situacao : st.situacao }">${st.situacao}</option>
                    </c:forEach>
                </select>

Edit:

Vi que você está usando o select puro, sem framework e acabei me confundindo.

Nesse caso, você tem que colocar um e verificar se o id da opção é o id que você está passando como parâmetro. Caso positivo, colocar um parâmetro extra, o SELECTED.

Ficaria:


<select name="situacao">
                    <c:forEach items="${statusTarefas}" var="st" varStatus="id">
            <c:choose>
            <c:when test="${situacaoId eq st.id}">
                            <option value="${st.id}" selected>${st.situacao}</option>
            </c:when>
            <c:otherwise>
                <option value="${st.id}">${st.situacao}</option>
            </c:otherwise>
            </c:choose>
                    </c:forEach>
                </select>

Aqui você tem que fazer um if pra decidir qual options marcar como SELECT, no caso apenas o que tiver o ID que você quer passar pra ele ser igual ao id do loop. Assim, ele vai ficar como selected quando a página carregar.

Obrigado pela ajuda!

Essa situacaoId não entendi.

outra, coisa, essa linha está com erro. Acho que é esse select

 <option value="${st.id}" selected>${st.situacao}</option>

Minha Enum Está assim

package br.com.triadworks.todoList.model;

public enum Situacao {

    PENDENTE("PENDENTE"), CONCLUIDO("CONCLUIDO"), ATRASADO("ATRASADO");

    private String situacao;

    private Situacao(String situacao) {
        this.situacao = situacao;
    }

    public String getSituacao() {
        return situacao;
    }
}