2013-05-07 85 views
0

我有這個程序,我正在寫,我試圖讓用戶登錄後顯示第二頁。我的第一個屏幕處理通過LoginInterfaceController,如下所示。@RequestMapping在春天無法獲得第二控制器接管

@Controller 
public class LoginInterfaceController{ 

protected final Log logger = LogFactory.getLog(getClass()); 
@RequestMapping 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    ModelMap model = new ModelMap(); 
    logger.info("Returning Login View"); 

    model.addAttribute(getLoginAttempt()); 

    return new ModelAndView("LoginView.jsp", model); 
} 

@ModelAttribute("LoginAttempt") 
public LoginAttempt getLoginAttempt() { 
    return new LoginAttempt(); 
} 

@RequestMapping(method=RequestMethod.POST) 
public String validateLogin(@ModelAttribute("LoginAttempt") @Valid LoginAttempt loginDetails, 
     BindingResult bindingResult, Model model, 
     @RequestParam(value="username", required=true) String username, 
     @RequestParam (value="password", required=true) String password) 
{ 
    String returnString; 
    LoginAttempt checkLogin = new LoginAttempt(username, password); 

    if(bindingResult.hasErrors()) 
    { 
     returnString = "LoginView.jsp"; 
    } 
    else if((!checkLogin.getUsername().equalsIgnoreCase("james") || !checkLogin.getPassword().equals("asdf123"))) 
    { 
     returnString = "FailedLogin.jsp"; 
    } 
    else 
    { 
     returnString = "redirect:" + "/ReferrerHome/"; 
    } 
    return returnString; 
} 

一旦用戶被驗證,它應該將它們重定向到/ ReferrerHome /頁面。

我LeadInterfaceController具有設置其請求的映射如下

@Controller 
public class LeadInterfaceController { 

private LeadServiceClass leadService = new LeadServiceClass(); 
protected final Log4JLogger logger = new Log4JLogger(); 

@RequestMapping(value="/ReferrerHome/") 
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    ModelMap model = new ModelMap(); 
    logger.info("Returning Referrer Home View"); 

    model.addAttribute(getLead()); 
    model.addAttribute(getBrokerList()); 
    return new ModelAndView("home.jsp", model); 
} 

@ModelAttribute("Lead") 
private Lead getLead() { 
    return leadService.getNewLead(); 
} 
@ModelAttribute("Broker") 
private ArrayList<Broker> getBrokerList(/*Referrer referrer*/) 
{ 
    return /*(ArrayList<Broker>)referrer.getBrokers() */ new ArrayList<Broker>(); 
} 

@RequestMapping(value="ReferrerHome/home.jsp", method=RequestMethod.POST) 
public String validateLogin(@ModelAttribute("Lead") @Valid Lead leadInput, BindingResult bindingResult, Model model)    
{ 
    String returnString; 
    if(leadInput.getLeadHomePhoneNumber() == null && 
      leadInput.getLeadWorkPhoneNumber() == null && 
      leadInput.getLeadMobilePhoneNumber() == null && 
      leadInput.getLeadEmail() == null){ 
     logger.info("HPhoneNum: " + leadInput.getLeadHomePhoneNumber()); 
     //code here to set an error state indicating that some contact information is required 
    } 
    if(bindingResult.hasErrors()) 
    { 
     returnString = "ReferrerHome/home.jsp"; 
    } 
    else 
    { 
     leadService.getLeadDao().addLead(leadInput); 
     returnString = "ReferrerHome/success.jsp"; 
    } 
    return returnString; 
} 

然而,當用戶被認證,則URL交換機/ ReferrerHome /但是LoginView.jsp被重新裝載,而不是被加載回到Home.jsp。 令人氣憤的是,這是2天前的工作,我不能想我做了什麼導致它破裂。

我這裏有

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 
<mvc:annotation-driven /> 
<tx:annotation-driven/> 
<jdbc:embedded-database id="LTSDatabase" type="HSQL" /> 
<context:component-scan base-package="com.au.curtin" /> 
<import resource="*/WEB-INF/classes/com/au/curtin/leadtrackingsystem.xml" /> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="LTSDatabase" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
      <prop key="hibernate.current_session_context_class">thread</prop> 
      <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory 
      </prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
</bean> 
<bean id="PersistenceAnnotationPostProcessor" 
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
<bean id="hibernateExceptionTranslator" 
    class="org.springframework.orm.hibernate4.HibernateExceptionTranslator" /> 
<bean 
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" 
    id="PersistenceExceptionTranslator" depends-on="hibernateExceptionTranslator" /> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value="" /> 
</bean> 

我LTSServlet.xml,在這裏我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <servlet> 
    <servlet-name>LTSServlet</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>LTSServlet</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
    <welcome-file>LoginView.htm</welcome-file> 
    </welcome-file-list> 
    </web-app> 

我撕裂我的頭髮試圖讓這個工作。

希望你能幫上忙。

回答

1

您沒有映射到validateLogin中的路徑(僅限請求類型)。因此,當您返回「home.jsp」時,它將映射到validateLogin而不是@RequestMapping(value="ReferrerHome/home.jsp", method=RequestMethod.POST)

嘗試: 1.返回ReferrerHome/home.jspLeadInterfaceController.handleRequest而不是home.jsp。 2.更改validateLogin上的映射,以便它包含它綁定的路徑(然後重定向後,您可以對錯誤有一個描述性錯誤)。

這應該有所幫助。

您也可以在DispatcherServlet上使用調試器並遵循流程(如何選擇「login.jsp」頁面)。

+0

我試過你的建議。我的問題是,如果我在LoginInterfaceController中放入@RequestMapping(value =「/」),當我啓動我的程序時(我正在使用Tomcat,因此調試失敗),我得到了404 Not Found。另外,LeadInterfaceController永遠不會運行。它沒有出現在我的日誌中。我的LoginInterfaceController在我的應用程序的根目錄下運行 – JamesENL 2013-05-07 11:34:01

+0

您可以使用Eclipse輕鬆地使用tomcat進行調試,只需在調試模式下啓動tomcat即可。順便說一句。您是否嘗試將返回值更改爲「ReferrerHome/home.jsp」而不是「home.jsp」? – 2013-05-07 11:40:59

+1

是的,它不起作用,因爲LeadInterfaceController實際上並沒有被調用。我現在最大的問題是我404' – JamesENL 2013-05-07 11:45:18