Search code examples
javajspconfigurationstruts2interceptor

HTTP Status 404 - No result defined for action and result login


I'm trying to develop a Struts 2 app where an action is invoked upon clicking a hyperlink which directs the user to a Classification.jsp using Struts action mapping. I'm getting the following error:

HTTP Status 404 - No result defined for action com.tdl.cempia.healthcare.action.ClassificationAction and result login

JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<form action="addClassification">
    <tabel>
    <tr>
        <td><input type="text" name="label"/></td>
        <td><input type="submit" value="Add"/></td>
    </tr>
    </tabel>
<form>  

Action:

<action name="addClassification" class="com.tdl.cempia.healthcare.action.ClassificationAction" method="addClassification">  
            <interceptor-ref name="loginStack" />  
            <result name="input">Overview/Classification.jsp</result>
            <result name="success">Overview/Classification.jsp</result>
            <result name="error">AdminLogin.jsp</result>  
        </action>

Class:

import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.tdl.cempia.healthcare.service.ClassificationService;

public class ClassificationAction extends ActionSupport 
{

    private static final Logger logger = Logger.getLogger(ClassificationAction.class);
    ClassificationService cService;
    private int id;
    private String label;
    private String level;
    private int perentID;
    
    @SuppressWarnings("unchecked")
    public String  addClassification(int id,String label,String level,int pID)
    {
        System.out.println(id);
        System.out.println(label);
        System.out.println(level);
        System.out.println(pID);
        return Action.SUCCESS;
        
    }
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getLabel() {
        return label;
    }
    public void setLabel(String label) {
        this.label = label;
    }
    public String getLevel() {
        return level;
    }
    public void setLevel(String level) {
        this.level = level;
    }
    public int getPerentID() {
        return perentID;
    }
    public void setPerentID(int perentID) {
        this.perentID = perentID;
    }       

}

Solution

  • You are using custom interceptor stack that returns login result code to the action invocation and this stops it from executing the action. But the action that is intercepting doesn't have this result configured in the action config.

    You can config result globally using <global-results> tag like in this answer

    <global-results>
        <result name="login" type="redirect">${target}</result>
    </global-results>