0

次のエラーが表示されます。

HTTP Status 404 - There is no Action mapped for namespace [/] and action name [loginForm] associated with context path

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

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>
   <package name="default" extends="struts-default"> 
        <action name="loginForm" class="org.nitish.action.LoginAction">
            <result name="success">Welcome.jsp</result>
            <result name="failure">index.jsp</result>
        </action>
    </package>
    <bean name="loginForm" class="org.nitish.form.LoginForm"></bean>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />
</struts>

index.jsp:

<%@ taglib prefix="s" uri="/struts-tags"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login page | Hello World Struts application in Eclipse</title>
    </head>
    <body>
    <h1>Login</h1>
    <s:form action="loginForm">
        <s:textfield name="userName" label="Username" />
        <s:password name="password" label="Password" />
        <s:submit />
    </s:form>
    </body>
</html>

フォルダ構造は次のとおりです。

ここに画像の説明を入力

編集:

アクションコード:

public class LoginAction extends ActionSupport {

    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        String target = null;
        LoginForm loginForm = (LoginForm)form; 

        if(loginForm.getUserName().equals("admin")
                && loginForm.getPassword().equals("admin123")) {
            target = "success";
            request.setAttribute("message", loginForm.getPassword());
        }
        else {
            target = "failure";
        }

        return mapping.findForward(target);
    }
}
4

2 に答える 2

0

ファイルnamespace="/" のパッケージタグに欠落がありますstruts.xml

<package name="default" extends="struts-default" namespace="/"> 
    <action name="loginForm" class="org.nitish.action.LoginAction">
        <result name="success">Welcome.jsp</result>
        <result name="failure">index.jsp</result>
    </action>
</package> 
于 2013-09-02T10:19:26.637 に答える
0

struts dtd によると、構成ファイル内の要素の順序が重要です。試す

<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="false" />

    <bean name="loginForm" class="org.nitish.form.LoginForm"></bean>

   <package name="default" extends="struts-default"> 
        <action name="loginForm" class="org.nitish.action.LoginAction">
            <result name="success">Welcome.jsp</result>
            <result name="failure">index.jsp</result>
        </action>
    </package>
</struts>

完全な名前空間を選択するオプションがデフォルトに戻されたため、この定数を変更する理由はありません。

そして取り除く

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

ウェルカム ファイルが Web サーバーによって最初に提供されるため、struts はアクションを見つけることができません。

次に、を編集してstruts.xml、パッケージに以下を追加します

<action name=""> 
  <result type="redirectAction">loginForm</result> 
</action>

そのため、Web アプリのルート パスに移動すると、デフォルトのアクションが実行され、アクションにリダイレクトされますloginForm

于 2013-09-02T10:23:38.233 に答える