使用"形式的路径参数传递对象"用"选择"不行

时间:2017-11-09 11:19:34

标签: java spring jsp

我有一个实体,它有两个属性作为对象(EmpresaCiudad)。

package es.dxd.project.model;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the REPRESENTANTE database table.
 * 
 */
@Entity
public class Representante implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="ID_REPRESENTANTE")
    private long idRepresentante;

    @Column(name="EMAIL")
    private String email;

    @Column(name="NOMBRE")
    private String nombre;

    @Column(name="NUM_TELEFONO")
    private String numTelefono;

    //bi-directional many-to-one association to Empresa
    @ManyToOne
    @JoinColumn(name="ID_EMPRESA")
    private Empresa empresa;

    //bi-directional many-to-one association to Ciudad
    @ManyToOne
    @JoinColumn(name="ID_SEDE")
    private Ciudad ciudad;

    public Representante() {
    }

    public long getIdRepresentante() {
        return this.idRepresentante;
    }

    public void setIdRepresentante(long idRepresentante) {
        this.idRepresentante = idRepresentante;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNombre() {
        return this.nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getNumTelefono() {
        return this.numTelefono;
    }

    public void setNumTelefono(String numTelefono) {
        this.numTelefono = numTelefono;
    }

    public Empresa getEmpresa() {
        return this.empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public Ciudad getCiudad() {
        return this.ciudad;
    }

    public void setCiudad(Ciudad ciudad) {
        this.ciudad = ciudad;
    }

}

我想插入" Representante"来自.jsp的实体,其中包含表单内的选择。我在下面显示。

<form:form method="post" modelAttribute="representante"
    action="${pageContext.request.contextPath}/addRepresentante">
    <div align="center">
        <table>
            <tr>
                <th colspan="2" style="text-align: center;">Añadir
                    representante</th>
            </tr>
            <tr>
                <form:hidden path="idRepresentante" />
                <td><form:label path="nombre">Nombre:</form:label></td>
                <td><form:input path="nombre" size="30" maxlength="20"></form:input></td>
            </tr>

            <tr>
                <td><form:label path="numTelefono">Teléfono:</form:label></td>
                <td><form:input path="numTelefono" size="30" maxlength="20"></form:input></td>
            </tr>
            <tr>
                <td><form:label path="email">Email:</form:label></td>
                <td><form:input path="email" size="30" maxlength="20"></form:input></td>
            </tr>
            <tr>
                <td>Ciudad:</td>
                <td><form:select path="ciudad">
                        <form:option value="NONE" label="Selecciona una ciudad" />
                        <form:options items="${listaDeCiudades}" itemLabel="nombreCiudad" />
                    </form:select></td>
            </tr>
            <tr>
                <td><form:label path="empresa">Empresa:</form:label></td>
                <td><form:select path="empresa">
                        <form:option value="NONE" label="Selecciona una empresa" />
                        <form:options items="${listaDeEmpresas}" itemLabel="nombre"
                            itemValue="idEmpresa" />
                    </form:select></td>
            </tr>

            <tr>
                <td colspan="2"><input type="submit" class="blue-button"
                    value="Insertar" /></td>

            </tr>
        </table>
    </div>
</form:form>

最后,我展示了提交表单时激活的驱动程序:

@RequestMapping(value = "/addRepresentante", method = RequestMethod.POST, headers = "Accept=application/json")
public String addRepresentante(@ModelAttribute("representante") Representante representante) {

    if(representante.getIdRepresentante() == 0) {
        representanteService.addRepresentante(representante);
    }else{
        representanteService.updateRepresentante(representante);
    }

    return "redirect:/getAllRepresentantes";
}

问题是,当我提交表单时,controller未激活。它返回一个错误:&#34;客户端发送的要求在语法上是不正确的&#34;。我相信错误是在使用参数&#34; path&#34;。

通过表单发送对象时

1 个答案:

答案 0 :(得分:0)

表单中的数据无法使用标题“Accept = application / json”发布。您必须在Controller函数中使用@RequestParams将表单中的数据传递到后端控制器函数。此外,enctype参数应具有“multipart / form-data”作为其值。

<form:form method="post" action="fileupload" enctype="multipart/form-data"
     id="uploadForm" >Input Elements Here</form:form>

在控制器端,您需要配置控制器,如:

public void TestController(@RequestParam("email") String email, ...)  { // do your thing here }