2014-02-21 2 views
0

Struts 2 데이터베이스 애플리케이션을 만들었습니다. 이 쿼리에서 나는 Ajax를 Struts 2 액션에 호출했다. 문제는 제출 버튼을 누를 때마다 Ajax 호출을 트리거하지만 Ajax 호출이 서버 조치 클래스 URL에 제대로 부딪치지 않는다는 것입니다. 매번 브라우저에서 404 예외가 발생했습니다. 이 문제를 해결하는 방법?Jsp 페이지에서 Struts 2 액션으로 Jquery Ajax를 호출하면 작동하지 않습니다.

$(document).ready(function(e){ 
     $("#loginPage_emailid").blur(function() { 
      console.log("OnBlur() EmailId"); 
      var emailId=$("#loginPage_emailid").val(); 
      console.log("emailId ------- "+emailId); 
      if(emailId != null && emailId.length != 0 && typeof emailId != 'undefined' && emailId != "InvalidEmailId"){ 
       FormValidator.prototype.validateEmailId(emailId); 
      } 
      else{ 
       $("#loginPage_emailid").val("InvalidEmailId"); 
       return false; 
      } 
     }); 

     $("#loginPage_emailid").click(function() { 
      var emailId=$("#loginPage_emailid").val(); 
      if(emailId == "InvalidEmailId"){ 
       $("#loginPage_emailid").val("EmailID"); 
      } 
     }); 

     $("#loginPage_password").blur(function() { 
      var password=$("#loginPage_password").val(); 
      if(password != "InvalidPassword"){ 
       $("#loginPage_password").val("Password"); 
      } 
     }); 

     $("#loginPage_password").blur(function() { 
      var password=$("#loginPage_password").val(); 
      console.log("password ------- "+password); 
      if(password != null && password.length != 0 && typeof password != 'undefined' && password != "InvalidPassword"){ 
       FormValidator.prototype.validatePassword(password); 
      } 
      else{ 
       $("#loginPage_password").val("InvalidPassword"); 
       return false; 
      } 
     }); 

     $("#loginPage_form").submit(function() { 
      console.log("Submit !!!!"); 
      if(!FormValidator.prototype.isValidEmailId || !FormValidator.prototype.isValidPassword){ 
       console.log("@#$%^&#$%^&@#%*@#$%&*#^&*#$%&*($%&*("); 
       if(!FormValidator.prototype.isValidEmailId){ 
        $("#loginPage_emailid").val("InvalidEmailId"); 
       } 
       if(!FormValidator.prototype.isValidPassword){ 
        $("#loginPage_password").val("InvalidPassword"); 
       } 
       return false; 
      } 
      else{ 
       console.log("Success full submit"); 
       var jsonData={}; 
       jsonData.emailId=FormValidator.prototype.emailId; 
       jsonData.password=FormValidator.prototype.password; 
       $.ajax({ 
        type: "POST", 
        url: "login.action", 
        data: jsonData, 
        success: function(data){ 
         console.log(""+data); 
        } 
       }); 
       return false; 
      } 
     }); 
    }); 

    function FormValidator(){ 
     var isValidEmailId=false; 
     var isValidPassword=false; 
     var emailId=null; 
     var password=null; 
    } 

    FormValidator.prototype.validateEmailId=function(emailId){ 
     console.log("Email Id ===== "+emailId); 
     var reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; 
     if (reg.test(emailId)){ 
      FormValidator.prototype.isValidEmailId=true; 
      FormValidator.prototype.emailId=emailId; 
     } 
    }; 

    FormValidator.prototype.validatePassword=function(password){ 
     console.log("Password ===== "+password); 
     FormValidator.prototype.isValidPassword=true; 
     FormValidator.prototype.password=password; 
    }; 

loginpage.jsp :

내 JS 파일입니다

<%@ 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"> 
<!--[if lt IE 7 ]> <html lang="en" class="ie6 ielt8"> <![endif]--> 
<!--[if IE 7 ]> <html lang="en" class="ie7 ielt8"> <![endif]--> 
<!--[if IE 8 ]> <html lang="en" class="ie8"> <![endif]--> 
<!--[if (gte IE 9)|!(IE)]><!--> 
<html lang="en"><!--<![endif]--><head> 
<meta charset="utf-8"> 
<title>Login Form</title> 
<link rel="stylesheet" type="text/css" href="css/style.css"> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script> 
<script type="text/javascript" src="js/formvalidator.js"></script> 
</head> 
<body> 
    <div class="container"> 
     <section id="content"> 
     <!-- <s:form id="loginPage_form"> 
      <div> 
       <s:textfield name ="emailid" label="EmailID" placeholder="EmailID" required="" id="loginPage_emailid" /> 
      </div> 
      <div> 
       <s:password type="password" name ="password" label="Password" placeholder="Password" required="" id="loginPage_password" /> 
      </div> 
      <div> 
       <s:submit value="Log in" /> 
      </div> 
     </s:form> --> 
     <form id="loginPage_form" > 
      <h1>Login Form</h1> 
      <div> 
       <input type="text" placeholder="EmailID" required="" id="loginPage_emailid"> 
      </div> 
      <div> 
       <input type="password" placeholder="Password" required="" id="loginPage_password"> 
      </div> 
      <div> 
       <input type="submit" value="Log in"> <a href="#" style="display: none;">Lost your password?</a> <a href="#" style="display: none;">Register</a> 
      </div> 
     </form> 
     <div id="loginPage_errormessage" style="display: none;margin: 0px 0px;position: absolute;left: 47%;top: 79%;color: orangered;">emailid or password is invalid</div> 
     <!-- form --> 
     <div class="button" style="display: none;"> 
      <a href="#">Download source file</a> 
     </div> 
     <!-- button --> </section> 
     <!-- content --> 
    </div> 
    <!-- container --> 
</body></html> 

이 내 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.convention.default.parent.package" value="default"/> 

    <package name="default" extends="struts-default" namespace="/"> 

     <action name="login" class="com.jamcracker.view.LoginAction" method="execute"> 
      <result name="success">/jsp/dummy.jsp</result> 
     </action> 

     <!-- <action name="index"> 
      <result>loginpage.jsp</result> 
     </action> --> 

     <!-- <action name="add" 
      class="com.jamcracker.view.ContactAction" method="add"> 
      <result name="success" type="chain">index</result> 
      <result name="input" type="chain">index</result> 
     </action> 

     <action name="delete" 
      class="com.jamcracker.view.ContactAction" method="delete"> 
      <result name="success" type="chain">index</result> 
     </action> 

     <action name="index" 
      class="com.jamcracker.view.ContactAction"> 
      <result name="success">index.jsp</result> 
     </action> --> 
    </package> 
</struts> 

LoginAction.java 클래스 :

package com.jamcracker.view; 

import com.opensymphony.xwork2.ActionSupport; 

public class LoginAction extends ActionSupport{ 

    private static final long serialVersionUID = 1L; 
    private String emailId; 
    private String password; 

    public String getEmailId() { 
     return emailId; 
    public void setEmailId(String emailId) { 
     this.emailId = emailId; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 

} } 

enter image description here

+0

질문과 실제로 관련이없는 코드는 삭제하십시오. –

답변

0

그래서 AJAX 호출이 어떤 결과를 반환하지 않습니다, 당신의 LoginAction 클래스에는 execute 방법이 없습니다. 간단한 execute 메서드를 추가해보십시오.

public String execute() { 
    return SUCCESS; 
} 
0

듣기, 404도 예외는 아닙니다. 요청 된 URL에 해당하는 런타임 구성에서 조치가 발견되지 않은 경우 Struts가 응답으로 설정 한 오류 코드입니다.

게시하지 않았기 때문에 web.xml은 (는) Error 404 issues using Struts application입니다.

또한 라이브러리 폴더 WEB-INF/lib에서 사용하지 않은 플러그인을 확인하고 제거하십시오. Struts2 - HTTP Status 404 - No result defined for action에서 문제를보세요. 그러나 정확한 오류 메시지와 함께 스택 추적을 게시해야합니다.

자바 스크립트 코드에서 작업을 호출 할 때 s:url 태그를 사용하여 작업 매핑에서 작업 URL을 작성하십시오. Jquery Error - While calling struts action을 참조하십시오. 당신이 아약스가 sj:submit 태그로 제출 만들 수있는 가능성이있다 struts2-JQuery와 플러그인을 사용하는 경우

코드는 그런데

$.ajax({ 
    type: "POST", 
    url: '<s:url namespace="/" action="login"/>', 
    data: jsonData, 
    success: function(data){ 
     console.log(""+data); 
    } 
}); 

을 변경해야합니다.

관련 문제