【问题标题】:Trying to open a edit form to edit an object in Spring but returning a 404尝试打开编辑表单以在 Spring 中编辑对象但返回 404
【发布时间】:2020-03-02 18:26:47
【问题描述】:

我正在尝试创建一个编辑表单并使用所选对象值预填充表单,但它返回的 HTTP 状态为 404,我收到的错误消息是

org.springframework.web.servlet.DispatcherServlet.noHandlerFound 否 GET 映射 /AgentsCRUD/agent/edit/1;jsessionid=07E2EC08848D0C9C9346DC67563DDF1F

我认为我所拥有的内容非常合乎逻辑,但我一定搞砸了映射。

获取AllAgent.jsp中的代码

 <spring:message code="welcome.message" /> 
<body>
    <table style="width:100%">
        <tr>
        <th align="left"><spring:message code="label.agentId" /></th>
         <th align="left"><spring:message code="label.name" /></th>
         <th align="left"><spring:message code="label.fax" /></th>
         <th align="left"><spring:message code="label.phone" /></th>
         <th align="left"><spring:message code="label.email" /></th>
         <th align="left"><spring:message code="label.datejoined" /></th>
         <th align="left"><spring:message code="label.sales" /></th>
         <th align="left"><spring:message code="label.actions" /></th>
        </tr>
        <c:forEach items="${agentList}" var="agent"> 
            <tr>
                <td>${agent.agentId}</td>
                <td>${agent.name}</td>
                <td>${agent.fax}</td>
                <td>${agent.phone}</td>
                <td>${agent.email}</td>

                <td>
                 <a href="\AgentsCRUD\agent\delete?agentId=${agent.agentId}"><spring:message code="label.delete" /></a>
                 <spring:url value="/agent/edit/${agent.agentId}" var="editURL"/>
                 <a href="${editURL}"><spring:message code="label.edit" /></a>
                 <a href="\AgentsCRUD\agent\add"><spring:message code="label.insert" /></a>
                </td>

            </tr>
        </c:forEach>
    </table>
</body>

控制器 AgentController.java 中的代码

      @GetMapping("/edit")
public ModelAndView EditAnAgent(@QueryParam("agentId") int agentId) {
    return new ModelAndView("/editAgent", "agent", service.getAgentById(agentId));
}


@GetMapping("/editAgent")
public ModelAndView editAgent(@Valid @ModelAttribute("agent") Agents a, BindingResult result, ModelMap model) {
    if (result.hasErrors()) {
        return new ModelAndView("/editAgent");
    }
    service.editAgent(a);
    return new ModelAndView("redirect:/agent");
}

Model AgentService.java 中的代码

public static Agents getAgentByID(int agentId) {
    EntityManager em = DBUtil.getEMF().createEntityManager();
    Agents a = null;
    try {
        a = em.createNamedQuery("Agents.findByAgentId", Agents.class)
                .setParameter("agentId", (agentId))
                .getSingleResult();
    } catch (Exception ex) {
        System.out.println("Error in getting property details: " + ex);
    } finally {
        em.clear();
    }
    return a;
}

public void editAgent(Agents a) {
    EntityManager em = DBUtil.getEMF().createEntityManager();
    EntityTransaction transaction = em.getTransaction();

    try {
        transaction.begin();
        em.merge(a);
        transaction.commit();
    } catch (Exception e) {
        System.out.println(e);
    } finally {
        em.close();
    }
}

editAgent.jsp 中的代码

   <form:form method="POST" action="/AgentsCRUD/agent/editAgent" modelAttribute="agent">

  <table>
            <tr> 
                <td><form:label path="agentId"><spring:message code="label.agentId" /></form:label></td>
                <td><form:input path="agentId"/></td> 
                <td style="color:red"><form:errors path="agentId"/> </td>
           </tr> 
            <tr>
                <td><form:label path="name"><spring:message code="label.name" /></form:label></td>
                <td><form:input path="name" /></td>
                <td style="color:red"><form:errors path="name"/> </td>
            </tr>
            <tr>
                <td><form:label path="phone"><spring:message code="label.phone" /></form:label></td>
                <td><form:input path="phone"/></td>
                <td style="color:red"><form:errors path="phone"/> </td>

            </tr>
            <tr>
                <td><form:label path="fax"><spring:message code="label.fax" /></form:label></td>
                <td><form:input path="fax"/></td>
                <td style="color:red"> <form:errors path="fax"/> </td>
            </tr>
           <tr>
                <td><form:label path="email"><spring:message code="label.email" /></form:label></td>
                <td><form:input path="email"/></td>
                <td style="color:red"> <form:errors path="email"/> </td>
            </tr>
            <tr>
                <td><form:label path="username"><spring:message code="label.username" /></form:label></td>
                <td><form:input path="username"/></td>
                <td style="color:red"> <form:errors path="username"/> </td>
            </tr>
              <tr>
                <td><form:label path="password"><spring:message code="label.password" /></form:label></td>
                <td><form:input path="password"/></td>
                <td style="color:red"> <form:errors path="password"/> </td>
            </tr>

            <tr>
                <spring:message code="submit.button" var="labelSubmit"></spring:message>
                <td><input type="submit" value="${labelSubmit}"/></td>
            </tr>
        </table>
</body>
</form:form>

【问题讨论】:

    标签: java spring forms get dispatcher


    【解决方案1】:

    在错误中给出的 url 是 .../edit/1 其中 1 是路径参数,

    但是在 get 映射中,您试图将其作为查询参数读取。

    试试这个。

    @GetMapping("/edit/{agentId}")
    Patient getEmployee(@PathParam("agentId") int agentId) ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多