簡體   English   中英

Spring如何將jsp的url映射到其各自的控制器?

[英]How the Spring maps url from a jsp to its respective controller?

我正在一個Spring Web項目上工作,我有很多JSP文件和很多控制器,但是我不知道如何做到這一點。

<form:form action="updateCustomer" autocomplete="true"  commandName="customer">  

表單自動映射到在其中定義updateCustomer的各個控制器。 還有其他控制器,但是url updateCustomer如何准確地傳遞給相應的控制器。

Customer.jsp文件如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>
<html lang="en">

<head>
<link
    href="${pageContext.request.contextPath}/static/css/bootstrap-nav-wizard.css"
    rel="stylesheet">
<link
    href="${pageContext.request.contextPath}/static/css/intlTelInput.css"
    rel="stylesheet">

<style>
ul.nav-wizard li a i {
    margin-right: 15px;
}
</style>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script     src="${pageContext.request.contextPath}/static/js/flickity.pkgd.min.js"></script>
<script     src="${pageContext.request.contextPath}/static/js/jquery.fancybox.pack.js"></script>
<script     src="${pageContext.request.contextPath}/static/js/waypoints.min.js"></script>
<script     src="${pageContext.request.contextPath}/static/js/custom/customer.js"></script>
<script     src="${pageContext.request.contextPath}/static/js/jqueryform-validator.js"></script>
<script     src="${pageContext.request.contextPath}/static/js/custom/common.js"></script>

<script type="text/javascript" src="${pageContext.request.contextPath}/static/js/intlTelInput.min.js"></script>
</head>

<body>
    <form:form action="updateCustomer" autocomplete="true"  commandName="customer">
        <form:hidden path="buyerId"/>
        <form:hidden path="user.userId" />
        <section>

            <div class="container" style="margin-top: 10px;">
                <div class="row">
                    <h3 class="main-title">My Profile</h3>
                </div>
                <div class="row">

                    <div>

                        <!-- Main Content Start -->
                        <div id="myTabContent" class="tab-content">
                            <!-- Step 1 Content Start -->
                            <div class="tab-pane fade active in" id="step1">
                                <div class="panel panel-default">
                                    <div class="panel-heading">
                                        <h3 class="panel-title">Personal Details</h3>
                                    </div>
                                    <div class="panel-body">
                                        <div class="row">
                                            <div class="col-xs-12 col-sm-4 form-group">
                                                <label>First Name</label><span class="req">*</span>
                                                <form:input class="form-control" path="user.firstName"
                                                      type="text"  maxlength="75"
                                                    />
                                            </div>
                                            <div class="col-xs-12 col-sm-4 form-group">
                                                <label>Middle Name</label>
                                                <form:input class="form-control" path="user.middleName"   maxlength="75"
                                                    type="text" />
                                            </div>
                                            <div class="col-xs-12 col-sm-4 form-group">
                                                <label>Last Name</label><span class="req">*</span>
                                                <form:input class="form-control" path="user.lastName"
                                                      type="text"   maxlength="75"
                                                     />
                                            </div>
                                        </div>


                                    </div><!--//panel body over -->
                                </div><!--//panel panel default over -->

                                <div class="panel panel-default">
                                    <div class="panel-heading">
                                        <h3 class="panel-title">Company Details</h3>
                                    </div>
                                    <div class="panel-body">
                                        <div class="row">
                                            <div class="col-xs-12 col-sm-6 form-group">
                                                <label>Company Name</label><span class="req">*</span>
                                                <form:input path="companyName" class="form-control"
                                                      type="text"  
                                                    maxlength="45"
                                                     />
                                            </div>
                                        </div>

                                    </div>
                                </div>
                                </div>
                                <div class="row" style="display: none;" id="mainBtn">
                                    <div class="col-xs-6 col-sm-2 pull-right" style="min-width: 170px;">
                                        <button class="btn" type="submit" name="action" value="2" style= "min-width: 170px;">Save & Continue</button>
                                    </div>
                                    <div class="col-xs-6 col-sm-2 pull-right" style="text-align: right; padding-right:0px;">   <!--  added property  padding-right:0px; to style   on 17/7 -->
                                        <button class="btn" type="submit" name="action" value="1" style= "min-width: 170px;">Save</button>
                                    </div>
                                </div>
                                <div class="row"  id="editBtn">
                                    <div class="col-xs-6 col-sm-2 pull-right">
                                        <a class="btn pull-right" id="edit"
                                            href="#" onclick="makeEditable()" style="min-width: 170px;">Edit</a>
                                    </div>
                                </div>
                                <br> <br>
                            </div>
                            <!-- Step 1 Content End -->
                        </div>
                        <!-- Main Content End -->
                    </div>
                </div>
            </div>
            <!-- /container -->
        </section>
    </form:form>

</body>

</html>

控制器文件如下:

    package com.htss.web.controller;

//assume all imports

@Controller
@RequestMapping("/buyer")
public class BuyerController {


    @Autowired
    private BuyerService customerService;

    @Autowired
    private UserService userService;

    @Autowired
    private CommonService commonService;
    @Autowired
    private MessageSource messageSource;

    @RequestMapping(value = "/open/customer")
    public String customerInfo() {
        return "customer";
    }



    @RequestMapping(value = "/edit_profile")
    public String editCustomerProfile(HttpSession session, Model model) {
        Integer buyerId = (Integer) session.getAttribute("entityId");
        BuyerFormBean bean = customerService.retrieveCustomer(buyerId);
        Long userId = (Long) session.getAttribute("userId");
        try {
            UserFormBean user = userService.getUser(userId);
            bean.setUser(user);
        } catch (IllegalAccessException | InvocationTargetException e) {
        }
        model.addAttribute("customer", bean);
        model.addAttribute("countries", commonService.getCountryDropdown());
        model.addAttribute("action", "updateCustomer");
        return "buyerProfile";
    }



    @RequestMapping(value = "/updateCustomer")
    public String updateCustomerProfile(Model model, HttpSession session, BuyerFormBean customer) {

        try {
            if (action == 1 || action == 2) {
                customer = customerService.modifyCustomer(customer);

            }

            }
            catch (Exception e) {
            e.printStackTrace();
            model.addAttribute("error",messageSource.getMessage("msg.Error",null,Locale.US));
        }
        Integer buyerId = (Integer) session.getAttribute("entityId");
        BuyerFormBean bean = customerService.retrieveCustomer(buyerId);
        Long userId = (Long) session.getAttribute("userId");        
        try {
            UserFormBean user = userService.getUser(userId);
            bean.setUser(user);
        } catch (IllegalAccessException | InvocationTargetException e) {
        }

        model.addAttribute("customer", bean);
        model.addAttribute("message",messageSource.getMessage("msg.Success",null,Locale.US));
        return "Customer";
    }


}

現在的問題是,當我單擊“保存”按鈕時,形成的網址是:
http:// localhost:8080 / 82ism / buyer / updateCustomer

這是怎么發生的? 現在,當我需要某個其他控制器的按鈕時,我需要給出整個URL,如下所示:

${pageContext.request.contextPath}/seller/edit_profile

這個項目一切正常,我只是想了解這個概念。

春天的重點是讓您不必擔心這些東西。 在應用程序中找到jsp的屬性的原因。

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

對於形式和方法...並非如此。 您必須按名稱校准的表單,方法被八義映射到url或action

喜歡:

@RequestMapping("/")
or
@RequestMapping(method=RequestMethod.POST)

要從控制器中調用表單的值,您首先必須將表單的字段作為變量將它們綁定到實體模型。 該方法如下所示:

@RequestMapping(method = RequestMethod.POST)    
public String processRegister(@ModelAttribute("userForm") User user,   
Map<String, Object> model) {
    ...
    return "view";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM