2011-12-08 28 views
0

我正在開發一個登錄功能,用於根據存儲在數據庫中的數據對用戶進行身份驗證,當我嘗試在下一個要顯示的JSP上顯示登錄錯誤消息時,即使登錄信息不匹配,郵件也不會顯示。爲什麼不將動作錯誤消息傳遞給下一頁?

struts.xml中

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="false" /> 
    <constant name="struts.custom.i18n.resources" value="ApplicationResources" /> 

    <package name="default" extends="struts-default" namespace="/"> 
    <action name="login" class="package1.LoginAction"> 
     <result name="success">MainPage.jsp</result> 
     <result name="error">Login.jsp</result> 
    </action> 
    </package> 
</struts> 

ApplicationResources.properties

label.username=User Name 
    label.password=Password 
    label.login=Login 
    label.domain=Select Domain 
    error.login=Invalid Username/Password. Please try again. 

的Login.jsp

<table border="0" align="center"> 
    <tr><s:actionerror /></tr> 
</table> 

<s:form action="login.action" method="post"> 
    <table border="0" align="center"> 
    <tr><s:textfield name="uid" key="label.username" size="20" /></tr> 
    <tr><s:password name="psw" key="label.password" size="20" /></tr> 
    <tr><s:select name="domain" 
        key="label.domain" 
        headerKey="1" 
        headerValue="-- Please Select --" 
        list="#{'01':'Tutor','02':'Student'}" /></tr> 
    <tr><s:submit method="execute" key="label.login" align="center" /></tr> 
    </table> 
</s:form> 

LoginAction.java

try { 
     Class.forName("com.informix.jdbc.IfxDriver"); 
     conURL = "jdbc:informix-sqli://*********/fxg:INFORMIXSERVER=" + 
       "sgdbuat11;user=*****;password=******"; 

     conn = DriverManager.getConnection(conURL); 
     stmt = conn.createStatement(); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 
    stmt = conn.createStatement(); 
    String qstr = "SELECT * FROM tutor"; 
    rset = stmt.executeQuery(qstr); 
    int count = 0; 
    String msg = ""; 
    while (rset.next()) { 
     String username = rset.getString("uid"); 
     if (this.uid.equals(username)) { 
      count++; 
      String password = rset.getString("psw1"); 
      if (this.psw.equals(password)) { 
       msg = "success"; 
      } else { 
       msg = "wrongpsw"; 
      } 
     } 
    } 
    if (count == 0) { 
     return "error"; 
    } else if (msg == "wrongpsw") { 
     return "error"; 
    } else { 
     return "success"; 
    } 
+0

爲什麼你記錄異常,然後還是繼續?另外,你的返回值是通過使用'=='比較字符串來選擇的;在這種情況下,它可能**因爲字符串實習而起作用,但這是一種*可怕的做法。 –

回答

1

我沒有看到你使用的關鍵error.login所以你怎麼能指望支柱來顯示呢?您需要自己填寫錯誤消息,例如通過在您的操作中致電addActionError("your message here")

0

我無法看到你在哪裏添加了addActionError,基本上如果你想設置任何這樣的動作級別的錯誤,你只需要設置它們就可以調用addActionError()或ActionMessage,而不是在你的jsp頁面上調用ypu需要向他們展示使用<s:actionerror/><s:actionmessage/>

宥需要設置的東西就像在你的動作類

if (count==0) 
     { 
      addActionError("Invalid Username/Password. Please try again"); 
      return "error" ;    
     } 
    else if (msg=="wrongpsw"){ 
     addActionError("Invalid Username/Password. Please try again");  
     return "error"; 

    } 
    else{ 
     return "success"; 
    } 

額外的始終是更好地檢查是否存在棧中的任何錯誤在你的JSP

<s:if test="hasActionErrors()"> 
<table border="0" align="center"> 
      <tr><s:actionerror/></tr></table> 
</s:if> 

希望這將有助於

相關問題