2014-06-18 38 views
1

的struts.xml:不能夠號召下相同的動作類兩種不同的方法,而無需使用validation.excludeMethods

<?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> 
    <package name="default" extends="struts-default"> 

     <action name="getLogin" class="login.action.LoginAction" 
      method="login"> 
      <result name="success">/Profile.jsp</result> 
      <result name="input">/LoginError.jsp</result> 
     </action> 

     <action name="getRegistered" class="login.action.LoginAction" 
      method="register"> 
      <result name="success">/Success.jsp</result> 
      <result name="input">/login.jsp</result> 
     </action> 

    </package> 
</struts> 

我想在這個XML兩項行動映射到Action類兩種不同的方法

LoginAction.java:

package login.action; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.struts2.interceptor.ServletRequestAware; 
import org.apache.struts2.interceptor.ServletResponseAware; 
import com.opensymphony.xwork2.ActionSupport; 
import login.service.LoginDao; 
import login.service.RegisterDao; 

@SuppressWarnings("serial") 
public class LoginAction extends ActionSupport implements ServletRequestAware, 
     ServletResponseAware { 

    private String username; 
    private String password; 
    private HttpServletRequest httpServletRequest; 
    private String firstname; 
    private String lastname; 
    private String regpassword; 
    private String conpassword; 
    private String regemail; 
    private String conemail; 
    private String phone; 

    public String register(){ 
     RegisterDao rdao = new RegisterDao(); 
     String registered = rdao.registerdao(firstname,lastname,regpassword,conpassword,regemail,conemail,phone); 
     if(registered == "TRUE"){ 
      return SUCCESS; 
     } 

     return INPUT; 
    } 


    public String login() { 
     System.out.println("user name::: "+username); 
     httpServletRequest.getSession().setAttribute("key", username); 
     httpServletRequest.getSession().setAttribute("key", password); 
     LoginDao db = new LoginDao(); 
     Boolean validate = db.loginresult(username, password); 
     if (validate == true) { 
      return SUCCESS; 

     } else { 
      return INPUT; 
     } 
    } 

    public HttpServletRequest getHttpServletRequest() { 
     return httpServletRequest; 
    } 

    public void setHttpServletRequest(HttpServletRequest httpServletRequest) { 
     this.httpServletRequest = httpServletRequest; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 

    public String getRegpassword() { 
     return regpassword; 
    } 

    public void setRegpassword(String regpassword) { 
     this.regpassword = regpassword; 
    } 

    public String getConpassword() { 
     return conpassword; 
    } 

    public void setConpassword(String conpassword) { 
     this.conpassword = conpassword; 
    } 

    public String getRegemail() { 
     return regemail; 
    } 

    public void setRegemail(String regemail) { 
     this.regemail = regemail; 
    } 

    public String getConemail() { 
     return conemail; 
    } 

    public void setConemail(String conemail) { 
     this.conemail = conemail; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 

    public void setServletRequest(HttpServletRequest request) { 
     this.httpServletRequest = request; 

    } 


    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    @Override 
    public void setServletResponse(HttpServletResponse arg0) { 
     // TODO Auto-generated method stub 

    } 



} 

Action類的登錄並註冊方法:

**login.jsp** 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <center> 
     <%@ taglib uri="/struts-tags" prefix="s"%> 
     <s:form action="getLogin.action" method="post" validate="true"> 
      <s:textfield label="Name" key="username"/> 
      <s:password label="Password" key="password"/> 
      <s:checkbox name="Rememberme" label="Remember Me" value="yes" 
       checked="checked"/> 
      <s:submit value="Sign in"/> 
     </s:form> 
    </center> 
</body> 
</html> 

Login.jsp重定向到Action類中的登錄方法。早些時候它工作正常。現在,這個動作給了麻煩:

**Registration.jsp** 

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <center> 
     <%@ taglib uri="/struts-tags" prefix="s"%> 
     <s:form action="getRegistered.action" method="post" validate="true"> 
      <div> 
       <table> 
        <s:textfield label="First Name" key="firstname" /> 
        <s:textfield label="Last Name" key="lastname" /> 
        <s:password label="Create your password" key="regpassword" /> 
        <s:password label="Confirm your password" key="conpassword" /> 
        <s:textfield label="Email" key="regemail1" /> 
        <s:textfield label="Re-Type Email" key="conemail" /> 
        <s:textfield label="Phone" key="phone" /> 
        <tr> 
        <td><s:submit value="Register" theme="simple"/></td> 
        <td><s:submit value="Cancel" theme="simple" onclick="document.forms[0].action='login.jsp';" /></td> 
        </tr> 
       </table> 
      </div> 
     </s:form> 
    </center> 
</body> 
</html> 

Registration.jsp重定向到getRegistered行動:

**LoginAction-Validation.xml** 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" 
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 
<validators> 
    <!-- Login page validation Starts --> 
    <field name="username"> 
     <field-validator type="requiredstring"> 
      <param name="trim">true</param> 
      <message>User Name is mandatory</message> 
     </field-validator> 
     <field-validator type="stringlength"> 
      <param name="minLength">5</param> 
      <param name="maxLength">10</param> 
      <param name="trim">true</param> 
      <message>User Name must be between 5 to 10 characters long</message> 
     </field-validator> 
    </field> 

    <field name="password"> 
     <field-validator type="requiredstring"> 
      <param name="trim">true</param> 
      <message>Enter your password</message> 
     </field-validator> 
     <field-validator type="stringlength"> 
      <param name="minLength">5</param> 
      <param name="maxLength">10</param> 
      <param name="trim">true</param> 
      <message>Password must be between 5 to 10 characters long</message> 
     </field-validator> 
     <field-validator type="regex"> 
      <param name="expression">((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{5,10})</param> 
      <message>Password must </message> 
     </field-validator> 
    </field> 
    <!-- Login page validation ends --> 
</validators> 

驗證XML的登錄用戶名和密碼..

當我運行這段代碼,在註冊操作的情況下,它總是返回「INPUT」字符串並在login action和login.jsp的情況下重定向到LoginError.jsp。請建議我怎麼能解決這個問題,而無需使用validation.excludeMethods

的LoginAction-getRegistered-validation.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" 
    "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 
<validators> 
<!-- Registration validation Starts --> 
    <field name="firstname"> 
     <field-validator type="requiredstring"> 
      <param name="trim">true</param> 
      <message>Firstname is mandatory</message> 
     </field-validator> 
     <field-validator type="stringlength"> 
      <param name="minLength">5</param> 
      <param name="maxLength">10</param> 
      <param name="trim">true</param> 
      <message>First Name must be between 5 to 10 characters long</message> 
     </field-validator> 
    </field> 
    <field name="lastname"> 
     <field-validator type="requiredstring"> 
      <param name="trim">true</param> 
      <message>Lastname is mandatory</message> 
     </field-validator> 
     <field-validator type="stringlength"> 
      <param name="minLength">5</param> 
      <param name="maxLength">10</param> 
      <param name="trim">true</param> 
      <message>Last Name must be between 5 to 10 characters long</message> 
     </field-validator> 
    </field> 
    <!-- Registration validation ends --> 
</validators> 

我已經驗證了第一個和最後的名字

回答

0

在您的驗證文件,該文件是每類,所以它會驗證這一類由validation攔截攔截所有操作/方法。您應該爲第一個動作getLogin(如LoginAction-getLogin-validation.xml)分開驗證邏輯,併爲getRegistered動作定義另一個驗證文件,如LoginAction-getRegistered-validation.xml。他們會按照行動處理。驗證器還有regex而不是expression

<field-validator type="regex"> 
    <param name="regex"><![CDATA[((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{5,10})]]></param> 
    <message>Password must </message> 
</field-validator> 
+0

我爲註冊和登錄方法創建了驗證xml。在註冊方法的情況下,我仍面臨重定向的問題。它始終重定向到/login.jsp user3747665

+0

您沒有發佈用於註冊的字段驗證程序。我建議你一個可以用來解決你的問題的解決方案。我不打算通過不清楚和不完整的問題來解決問題。 –

+0

對不起,我剛剛在問題 – user3747665

0

刪除.action從操作名稱<s:form>開始的擴展名,並確保在部署時將struts.xml複製到WEB-INF/classes下。

<s:form action="getRegistered" method="post" validate="true"> 

一種更簡潔的方法是使用<s:url>和引用創建的URL中<s:form>

<s:url var="actionUrl" action="getRegistered" namespace="" /> 
<s:form action="%{actionUrl}" method="post" validate="true"> 
+0

我與改變形式的建議......而我在struts.xml是在WEB-INF/classes目錄文件夾..但仍然是一個重定向到loginError.jsp和login.jsp的 – user3747665

+0

HTTP:/ /stackoverflow.com/a/24241934/1654265 –

相關問題