2013-09-05 4 views
12

पोस्ट करते समय यूआरएल पथ संलग्न करना मैं वसंत एमवीसी के लिए नया हूं। मैंने एक साधारण लॉगिन आवेदन बनाया। लेकिन मेरे मामले में पहली बार यूआरएल पोस्ट करने और कंट्रोलर विधि को सही तरीके से कॉल करने के लिए। दूसरी बार यह नियंत्रक के एक और समय के साथ पथ जोड़ रहा है। पहली बार पोस्ट: // लोकलहोस्ट: 80 9 0/springmvc/खाता/लॉगिन उसी पृष्ठ में सेकेंड समय: // लोकलहोस्ट: 80 9 0/springmvc/खाता/खाता/लॉगिन। मैं इस पुनर्निर्देशन समस्या को कैसे ठीक करूं?स्प्रिंग एमवीसी: फॉर्म

यह मेरा नियंत्रक पेज:

@Controller 
@RequestMapping("account") 
public class AccountController { 
    AccountService service = new AccountService(); 
    @RequestMapping(value = "account/default", method = RequestMethod.GET) 
    public ModelAndView RegisterUser() { 
     return new ModelAndView("/Account/Index","command",new User()); 
    } 

    @RequestMapping(value = "/registeruser", method = RequestMethod.POST) 
    public ModelAndView RegisterUser(User user) { 
     user.setMessage(service.Register(user)); 
     return new ModelAndView("/Account/Index", "command", user); 
    } 

    @RequestMapping(value = "/register", method = RequestMethod.POST) 
    public ModelAndView RegisterUer(User user) { 
     user.setMessage(service.Register(user)); 
     return new ModelAndView("/Account/create", "command", user); 
    } 

    @RequestMapping(value = "/login", method = RequestMethod.POST) 
    public ModelAndView LoginUser(User user, ModelMap model) { 
     String msg = service.isAuthendicated(user) ? "Logged in" : "Failed"; 
     user.setMessage(msg); 
     return new ModelAndView("/Account/Index", "command", user); 
    } 
} 

यह मेरा jsp पेज:

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%> 

<t:genericpage> 
    <jsp:body> 
     <h2>Login</h2> 
     <div> 
      ${command.message} </div> 
     <a href="account/register">Register</a> 
    <form:form action="account/login" method="post"> 
     <div> 
       <form:input path="username" /> 
      </div> 
     <div> 
       <form:input path="password" /> 
      </div> 
     <input type="submit" value="Login"> 
    </form:form> 
    </jsp:body> 
</t:genericpage> 

मैं आम पेज के लिए टैग पुस्तकालय इस्तेमाल किया:

<%@tag description="Master Page" pageEncoding="UTF-8"%> 
<html> 
<body> 
    <div id="pageheader"> 
     <h2>WElcome</h2> 
    </div> 
    <div id="body"> 
     <jsp:doBody /> 
    </div> 
    <div id="pagefooter"> 
     <p id="copyright">Copyright</p> 
    </div> 
</body> 
</html> 

उत्तर

24
वसंत का कौन सा संस्करण उपयोग कर रहे हैं पर निर्भर करता है

, यहाँ कुछ विकल्प हैं:

स्प्रिंग 3.1 और कम या वसंत 3.2.3 और उच्च

आपको अपने URL होना चाहिए/क्रियाएं आपके संदर्भ पथ के लिए विशिष्ट रूट-रिश्तेदार हैं।

<form:form action="${pageContext.request.contextPath}/account/login" method="post"> 

नोट: वसंत 3.2.3 servletRelativeAction शुरू की लेकिन मैं इसे उपयोग नहीं किया है।

स्प्रिंग 3.2

कुछ मत करो, संदर्भ पथ prepended है - यह वास्तव में एक breaking change and eventually rolled back था।

<form:form action="/account/login" method="post"> 
//will produce action="/springmvc/account/login" 
7

एक साथ अपने प्रपत्र कार्रवाई शुरू /

<form:form action="/account/login" method="post"> 

ऐसा नहीं करके, आप ब्राउज़र को पता बार पर पहले से मौजूद यूआरएल पर कार्रवाई को जोड़ने के लिए कह रहे हैं।

और तुम कहाँ (वसंत के form:form का उपयोग नहीं द्वारा) को सीधे HTML में इस तरह के लिंक हैं तो c:url उपयोग करने के लिए ठीक से आदि संदर्भ पथ सहित यूआरएल यह दूर उचित सापेक्ष URL के निर्माण से दर्द का एक बहुत लेता है निर्माण करने के लिए प्रयास करें।

<a href="<c:url value="/account/register" />">Register</a> 
+1

अगर मैं उपयोग कर रहा हूँ/की तरह कार्रवाई लिंक beofre इसका मतलब ब्राउज़र इस तरह पथ यूआरएल में आवेदन नाम नहीं ले रही // स्थानीय होस्ट: 80 9 0/खाता/लॉगिन – manivannan

+2

तब 'c: url' आज़माएं – adarshr

संबंधित मुद्दे