2
respostas

Editando um registro com Spring MVC

Bom dia!

Sou iniciante em Spring MVC, já fiz os cursos e até comprei o livro da casa do código mas não consigo resolver uma questão simples em relação ao uso da framework. Minha intenção é listar os registros cadastrados e, ao clicarem um deles, o registro vai para um formulário e lá eu adiciono mais algumas informações. Coisa corriqueira de qualquer sistema, mas não consegui fazer ainda. A primeira parte, de listar os registros, deixando um lik em cada um com uma url do tipo :

<a href=${mvcUrl('controller#formulario'}.arg(0, entidade.id).build()}">id

funciona direitinho, meu colntroller recebe esse id, passa o mesmo para o DAO, que pesquisa e retorna o registro, que eu populo no formulário de edição, ai é que vem as dúvidas...

Tentei algumas coisas mas não deram certo, qual seria melhor abordagem? Eu já tentei criando um RequestMapping com vários PathVariable (uma com id, e outras duas com informações novas que desejo gravar nesse registro) mas não funcionou, pelo que entendi, o comando mvcUrl monta a url com as informações que já existem, mas eu quero colocá-las ainda.

Não acho que seja assim... Enfim, se alguém puder ajudar.

Agradeço desde já.

2 respostas

O que é que você não está conseguindo fazer? Poderia colocar um trecho do código e o que realmente está ocorrendo?

//Meu model @Entity public class OS { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String categoria; private String solicitacao; private String solicitante; //Será usado o ID windows

private LocalDate dataAbertura;
private LocalDate dataUltimoEstado;
private LocalDate dataFechamento;

private Estado estado;

private String acatante;

@ElementCollection
private List<Observacao>observacoes=new ArrayList<Observacao>();

public Long getId() {
    return id;
}

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

public String getCategoria() {
    return categoria;
}

public void setCategoria(String categoria) {
    this.categoria = categoria;
}

public String getSolicitacao() {
    return solicitacao;
}

public void setSolicitacao(String solicitacao) {
    this.solicitacao = solicitacao;
}

public String getSolicitante() {
    return solicitante;
}

public void setSolicitante(String solicitante) {
    this.solicitante = solicitante;
}

public LocalDate getDataAbertura() {
    return dataAbertura;
}

public void setDataAbertura(LocalDate dataAbertura) {
    this.dataAbertura = dataAbertura;
}

public LocalDate getDataUltimoEstado() {
    return dataUltimoEstado;
}

public void setDataUltimoEstado(LocalDate dataUltimoEstado) {
    this.dataUltimoEstado = dataUltimoEstado;
}

public LocalDate getDataFechamento() {
    return dataFechamento;
}

public void setDataFechamento(LocalDate dataFechamento) {
    this.dataFechamento = dataFechamento;
}

public Estado getEstado() {
    return estado;
}

public void setEstado(Estado estado) {
    this.estado = estado;
}
public String getAcatante() {
    return acatante;
}

public void setAcatante(String acatante) {
    this.acatante = acatante;
}

public List<Observacao> getObservacoes() {
    return observacoes;
}

public void setObservacoes(List<Observacao> observacoes) {
    this.observacoes = observacoes;
}


@Override
public String toString() {
    return "OS [id=" + id + ", categoria=" + categoria + ", solicitacao=" + solicitacao + ", solicitante="
            + solicitante + ", dataAbertura=" + dataAbertura + ", dataUltimoEstado=" + dataUltimoEstado
            + ", dataFechamento=" + dataFechamento + ", estado=" + estado + "]";
}

} //Meu método Controller

@RequestMapping(value = "/atualizar/{id}/{estado}/{obs}", method = RequestMethod.POST) public ModelAndView atualizar(@PathVariable("id") Long id, @PathVariable("estado") String estado, @PathVariable("obs") String obs) { OS os=dao.os(id); os.setEstado(Estado.valueOf(estado)); Observacao o=new Observacao(); o.setObs(obs); os.getObservacoes().add(o); dao.gravar(os); return processamento(os.getId()); }

// meu form

form:form action="${s:mvcUrl('OC#atualizar').arg(0, os.id).arg(1, os.estado).arg(2, os.observacoes[indexObs].obs).build()}" method="post" commandName="os">

Chamado número ${os.id }
Data de abertura${os.dataAbertura}
SolicitanteCategoria
${os.solicitante}${os.categoria}
Solicitação
${os.solicitacao}
Estados : ${estado[0]}
Estado atual : ${os.estado} <form:select path="estado"> <c:forEach items="${estado}" var="e" varStatus="status"> <form:option value="${estado[status.index].name()}">${estado[status.index].name()}
        </td>
    </tr>
    <tr>
        <td colspan="2">
            Observações cadastradas
        </td>
    </tr>
    <tr>
    <c:forEach items="${os.observacoes}" var="observacao" varStatus="index">
        <td colspan="2">${observacao.obs}</td>
    </c:forEach>
    </tr>
    <tr>
        <td colspan="2">
            Adicione uma observação
        </td>
    </tr>
    <tr>
        <td><form:textarea path="observacoes[${indexObs }].obs"/></td>
        <form:hidden path="observacoes[${indexObs }].obs"/>
    </tr>
    <tr>
        <form:hidden path="id"/>
        <td><form:button >Gravar</form:button> </td>
    </tr>
</table>
</form:form>

O que eu gostaria de fazer é simplesmente pegar um registro que já existe, adicionar algumas informações e salvar, nada demais, mas não estou conseguindo...

O form é populado corretamente com registro, agora está dando páu na criação da Url, sinceramente não sei se essa é a forma correta, estou pesquisando...

Eu vou descobrir, mas se alguém puder me passar a orientação e a forma correta de fazer, melhor....

Agradeço desde já!